1.3 字符串相关操作的实现

目录

一、前言

二、常用操作

三、常用操作实现

长度          复制         替换         删除       插入     

比较          子串         分割         匹配       合并 

四、总结:


一、前言

字符类型数据是我们常用的数据类型,比如姓名、籍贯、描述信息等等,为此,我们需要掌握一些常用的字符串操作。

二、常用操作

长度计算、复制、替换、删除、插入、比较、子串、分割、匹配、合并

三、常用操作实现

  • 长度

#include<stdio.h>
int Strlen(char *s){
	int i;
	for(i=0;s[i] !='\0';) //字符数组中没有存储数据的地方为 '\0' 
		i++;
	return i;	
}

int main(){	

	char string[10];
	int length;
	gets(string);//原型 char * gets ( char * str ) 
	length=Strlen(string);
	printf("%d\n",length);	
	
	return 0;
} 
  • 复制 

#include"stdio.h"
char *strcpy(char *s1,char *s2)
{
  int i;
  for(i=0;s2[i]!='\0';i++)
  	s1[i]=s2[i];
  s1[i]='\0';
  return s1;	
}
void main()
{
	char string[50];
	char copystring[50];
	printf("\nPlease input string:");
	gets(string);
	strcpy(copystring,string);
	printf("\nString:%s",string);
	printf("\nCopystring:%s",copystring);
}
  • 替换

#include"stdio.h"
char *strrep(char *s1,char *s2,int pos)
{
    int i,j;
    pos--;
    i=0;
    for(j=pos;s1[j]!='\0';j++)
    	if(s2[i]!='\0')
    		{
    			s1[j]=s2[i];
    			i++;
    		}
    	else
    		break;
    return s1;
}
void main()
{
    char string1[100];
    char string2[50];
    int position;
    printf("\nPlease input original string:");
    gets(string1);
    printf("\nPlease input substitute string:");
    gets(string2);
    printf("\nPlease input substitute position:");
    scanf("%d",&position);
    strrep(string1,string2,position);
    printf("\nThe final string:%s\n",string1);
}

  • 删除

#include"stdio.h"
char *strdel(char *s,int pos,int len)
{
    int i;
    pos--;
    for(i=pos+len;s[i]!='\0';i++)
    	s[i-len]=s[i];
    s[i-len]='\0';
    return s;
}
void main()
{
		char string[50];
		int position;
		int length;
		printf("\nPlease input original string:");
		gets(string);
		printf("\nPlease input delete position:");
		scanf("%d",&position);
		printf("\nPlease input delete length:");
		scanf("%d",&length);
		strdel(string,position,length);
		printf("\nThe final string:%s",string);
}
  • 插入

#include "stdio.h"
#include <string.h>
#define   MAX_SIZE   100
void insert (char *s,  char  *t,  int i)
{
	char string[MAX_SIZE],  *temp =string;
	if  ( i < 0||i > strlen (s) )
    {
		printf ( "插入位置不正确!\n");
		exit (1);
	}
	if  (!strlen (s))
		strcpy (s,  t);
	else   if (strlen (t))  {
		strncpy (temp, s, i);
		strcat (temp, t) ;
		strcat (temp,  (s + i ));
		strcpy (s, temp );
	}
}
int  main ()
{
	char s[]="Sitplease.";
	char t[]=" down ";
	insert(s,t,-1);//将t从s的下标为3的位置开始插入到s中 
	printf("%s",s);
	printf ( "\n");
	return 0;
}
  • 比较

#include"stdio.h"
int strcmp(char *s1,char *s2)
{
    int i,j;
    for(i=0;s1[i]==s2[i];i++)
        if(s1[i]=='\0'&&s2[i]=='\0')
            return 0;
    if(s1[i]>s2[i])
        return 1;
    return -1;
}
void main()
{
		char s1[50];
		char s2[50];
		int compare;
		printf("\nPlease input string(1):");
		gets(s1);
		printf("\nPlease input string(2):");
		gets(s2);
		compare=strcmp(s1,s2);
		printf("\nString(1):%s",s1);
		printf("\nString(2):%s",s2);
		printf("\nCompare result:");
		switch(compare)
		{
		  case 0:
		      printf("\nString(1)=String(2)\n");
		      break;
          case 1:
		      printf("\nString(1)>String(2)\n");
		      break;
          case -1:
		      printf("\nString(1)<String(2)\n");
		      break;
    }
}
  • 子串

#include"stdio.h"
char *substr(char *s,int pos,int len)
{
    char s1[50];
    int i,j,endpos;
    pos--;
    endpos=pos+len-1;
    for(i=pos,j=0;i<=endpos;i++,j++)
    	s1[j]=s[i];
    s1[len]='\0';
    printf("\nThe substring is '%s'\n",s1);
    return s1;
}
int  main()
{
		char string[100];
		char *substring;
		int position;
		int length;
		printf("\nPlease input string:");
		gets(string);
		printf("Please input start position:");
		scanf("%d",&position);
		printf("Please input substring length:");
		scanf("%d",&length);
		substring=substr(string,position,length);
		printf("\n%s",substring);
		return 0;		
}
  • 分割

#include"stdio.h"
int partition(char *s1,char *s2,int pos)//pos记录上一次分割到的位置 
{
	int i,j;
	i=pos;
	while(s1[i]==' ')//如果遇到空格就跳过 
		i++;
	if(s1[i]!='\0')
		{
			j=0;
			while(s1[i]!='\0'&&s1[i]!=' ')
			{
				s2[j]=s1[i];
				i++;
				j++;
			}
			s2[j]='\0';
			return i;//返回上次分割结束的位置 
		}
	 else
		return -1;
}
int  main()
{
		char string[50];
		char partition_string[20];
		int position;
		int k;
		printf("\nPlease input strng:");
		gets(string);
		position=0;
		printf("\nPartition result:\n");
		k=0;
		while((position=partition(string,partition_string,position))!=-1)
		{
			k++;
			printf("Partition %d:%s\n",k,partition_string);
		}
		return 0;
}
  • 匹配  

#include "stdio.h"
#include <string.h>
int  nfind ( char  *B,  char  *A )
{
  int  i, j, start  = 0;
  int  lasts = strlen (B)-1;
  int  lastp = strlen (A)-1 ;
  int  endmatch =  lastp;
  for(i=0;endmatch<=lasts;endmatch++,start++)
  {
      if ( B[endmatch] == A[lastp])//如果最后一位匹配,那么开始从头遍历判断是否匹配 
             for (j=0,i=start;j<lastp&&B[i]==A[j];)
              i++,j++;
      if ( j == lastp ) 
             return (start+1);    /*成功  */
  }
  /*printf("%d %d %d",lasts,lastp,start); */
  if(start==0)
      return  -1;
}
void main ()
{
	char s[]="Sit please";
	char t[]="please";
	int po=nfind(s,t);
	printf("%d",po);
	printf("\n");
}
  • 合并 

#include "stdio.h"
#include <string.h>
void strcat(char *des,char *sour)
{
  int end=strlen(des);
  int i,j,num;
  num=strlen(sour);	
  char res[num+end];
  strcpy(res,des);
	for(i=end,j=0;j<num;i++,j++)
		res[i]=sour[j];	   
	for(i=0;i<end+num;i++)
	   printf("%c",res[i]);
	printf("\n");
}
void main ()
{
	char s[]="Sit down";
	char t[]=" please!";
	strcat(s,t);
}

四、总结:

 这部分很重要,为以后的链表操作打下基础,需要熟练掌握

猜你喜欢

转载自blog.csdn.net/xiaohaiguang/article/details/105547304
1.3