数据结构--->字符串插入函数

本文详细介绍了字符串的基本概念及其在C语言中的各种操作方法,包括创建、拼接、比较、复制、查找等功能函数的使用技巧。
  • 字符串是有单个字符组合而成的,字符串的结尾是使用\0来表示的,'\0'表示的含义是一个字符;
#define MAX_SIZE
char *s[MAX_SIZE]="dog";
  • 其实上面的字符在进行存储时,是dog\0
  • 对于字符创来说,支持的操作包括:

    • 创建char s[]="hello";
    • 字符串拼接char *strcat(char *dest,char *src),函数的返回值是dest的指针值,但是首先需要保证的是dest的地址空间长度是可以容纳拼接之后的字符串的,否则字符串拼接就会出错同时还有一个函数char *strncat(chr *dest,char *src,int size);

      //对于这个函数需要注意的一点是str1的空间需要能够容纳所有的元素;
      char str1[20]="hello,";
      char str2[]="world";
      char *newstr=strcat(str1,str2);
      printf("%s\n",newstr);
    • 字符串比较函数bool strcmp(char *str1,char *str2);,函数的返回值是一个bool值,如果前面的字符串小,返回值小于0,相等时,返回值为0,否则返回值大于0

      int retu = strcmp(str1,str2);
      printf("%d",retu);
    • 字符串复制函数char *strcpy(char *dest,char *src),用于将字符串从src复制到dest,同样需要保证dest有足够的空间来容纳;

      char str3[11];
      strcpy(str3,str2);
      printf("%s\n",str3);
    • 获取字符串长度的函数:size_t strlen(char *s):返回S的长度;

      printf("strlen of newstr %zu\n",strlen(newstr));
    • 用于查找某个字符第一次出现的位置char *strchr(char *s,char c);,返回cs中第一次出现的位置,如果没有出现就返回NULL

      newstr=strchr(str1,'l');
      printf("the posotion is %s\n",newstr);
      
    • 用于返回C在字符串S中最后一次出现的位置,char *strrchr(char *s,char c);,如果没有出现就返回NULL

    • 用于返回第一个使用某个分隔符分割的串,char *strtok(char *s,char *delimiters);

      newstr=strtok(str1,"ll");
      printf("the str is %s\n",newstr);
    • 用于返回字符串的位置:char *strstr(char *s,char *pat);,用于返回pat第一次出现的位置;

      newstr = strstr(str1,"ll");
      printf("the posotion is %zu\n",length);
    • S中查找spanset中子串的最大长度,并且返回这个长度,size_t strspn(char *s,char *spanset);

      size_t length=strspn(str1,"l");
      printf("the posotion is %zu\n",length);
    • 查找目标字符串没有出现的最大长度:size_t *strcspn(char *s,char *spanset)

      size_t length=strspn(str1,"l");
      printf("the posotion is %zu\n",length);
    • 在目标字符串中查找spanset中的所有字符第一次出现的位置:char *strpbrk(char *s,char *spanset);

      newstr =  strpbrk(str1,"l");
      printf("the posotion is %zu\n",length);
  • 分析一个字符串插入的函数用来加深理解字符串:
    • 假设由两个字符串char a[MAX_SIZE]="AAAAA"以及char b[MAX_SIZE]="bbbbb",需要的是将字符串b插入到字符串a的某个位置,这个位置可以试开始位置,也可以是其他的任意位置;
    • 将字符串b要放入字符串a的位置假定为i,在进行放入的过程中,需要借助于几个系统函数strcat,strcpy来完成,这几个函数位于string.h标准库头文件里面;
  • 分析放入的过程:
    字符串插入的位置过程分析
  • 实现上面过程的代码片段
char a[MAX_SIZE]="AAAAA";
char b[MAX_SIZE]="bbbbb";
char temp[MAX_SIZE];
strncpy(temp,a,3);
//对于strcat函数来说,函数在赋值字符串时,同时返回的是当前末尾的字符串指针,所以是需要是哟个指针进行接收的;
char *s=strcat(temp,b);
strcat(s,a+3);
printf("%s",temp);
  • 上述函数的执行结果
    函数的执行结果
  • 对于上面的字符串插入函数没有进行异常的判断和处理,还不是很完善,所以只是处理的一个大致过程;
  • 将上面的改编成为一个可以使用的函数的代码过程
void strings(char *dest,char *source,size_t i){
    char strings[MAX_SIZE],*temp=string;
    if(i>strlen(dest)){ fprintf(stderr,"Position is out of bounds\n"); exit(EXIT_FAILURE); }
    if(!strlen(dest)) strcpy(dest,source);
    else if(strlen(t)){
        strncy(temp,s,i);
        strcat(temp,t);
        strcat(temp,(s+i));
        strcpy(s,temp);
    }
}
  • 上面的代码借助了中间俺字符串数组空间temp,在空间上面是存在浪费的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值