Linux C 字符串操作的基本使用

来源:互联网 发布:何祚庥 知乎 编辑:程序博客网 时间:2024/06/10 22:09

http://www.360doc.com/content/12/0309/15/8500224_193018975.shtml



所属头文件:<string.h>

0、获取字符串长度:int strlen(char *s)

int strlen(char *s)

函数说明:此函数用于获取s的长度,不包括'\0'注:切记最好保证s的尾部是'\0',strlen函数读到'\0'会自动停止然后统计字符数
返回值:字符数

1、查找指定的字符:index函数,rindex函数,strchr函数 strrchr(其中index函数和strchr函数基本相同,rindex函数和strchr函数相同)

(1)char *index(const char* s, char c) char *strchr(const char* s, char c)
函数说明:index函数用于查找字符串s中第一个出现c字符的地址,然后将该字符的地址返回.strchr函数与index相似
返回值:若找到指定到字符则返回该字符的地址,否则返回0
举例: 
  char s[] = "abcdeabcde";
  char *sdest = NULL;
  sdest = index(s,'d');
  printf("sdest: %s\n",sdest);
输出结果:sdest: deabcde
 
 (2)char *rindex(const char* s, char c) char *strrchr(const char* s, char c)

函数说明:类似于index函数,但是他是从字符串开始查找字符c,并返回从字符串尾部开始第一个符合条件的字符的地址(strrchr与rindex相似)
返回值:同index一样
举例:
  char s[] = "abcdeabcde";
  char *sdest = NULL;
  sdest = rindex(s,'d');
  printf("sdest: %s\n",sdest);
输出结果:sdest: de

2、查找满足条件字符串中任意一个字符:strpbrk函数

char *strpbrk(const char *s, const char *accept)
函数说明:查找s字符串第一个符合accept字符串中任意一个字符的字符的地址
返回值:符合条件的字符的地址
举例:
  char s[] = "abcdefgefgbe";
  char t[] = "omgf";
  char *d = NULL;
  d = strpbrk(s,t);//应该会从s中找到‘f'字符的地址
  if(d != 0)
  {
    printf("原字符串: %s\n",s);
    printf("获得到字符串: %s\n",d);
  }
输出结果:
原字符串: abcdefgefgbe
获得到字符串: fgefgbe

3、统计字符串中连续包含或不包含指定字符串内容到字符数:strspn函数 ,strcspn函数

(1)size_t strspn(const char *s, const char *accept)
函数说明:从s的开头开始计算连续的字符,这些字符都属于accept中字符,遇到不是accept中的字符则停止,并返回字符个数n,即代表s开始处有连续n个属于accept字符串的字符.
返回值:返回s字符串起始位置开始连续属于accept字符串的字符个数
举例:
  char s[] = "abcdefgefgmmmmmbbe";
  char t[] = "bcdaefg";
  int inumber = 0;
  inumber = strspn(s,t);
  printf(" %d\n",inumber);
输出结果:10

(2)size_t strcspn(const char *s,const char *reject)

函数说明:与strspn相反,从s的开头开始计算连续不属于reject的字符数,并返回字符个数n,即代表s开头处有n个不属于accept字符串的字符。
返回值:返回s字符串起始位置开始连续不属于accept字符串到字符个数
举例:
  char s[] = "abcdefgefgmqmmmmbbe";
  char t[] = "mq";
  int inumber = 0;
  inumber = strcspn(s,t);
  printf(" %d\n",inumber);
输出结果:10

4、查找指定字符串:char *strstr(const char *s, const char *need);

函数说明:从s中找到与need匹配到子字符串,并将该子字符串的地址返回
返回值:匹配的子字符串的起始地址
举例:
  char s[] = "abcdefgefgmqmmmmbbe";
  char t[] = "fge";
  char *score = NULL;
  score = strstr(s,t);
  printf(" %s\n",score);
输出结果:
 fgefgmqmmmmbbe

5、字符串分割:char *strtok(char *s, const char *delim)

函数说明:strtok函数将s按照delim字符串中的字符分割成一个个子字符串,对于字符串s,当遇到delim中到字符,则将该字符替换成'\0'然后返回'\0'之前的字符串子串。若继续分割,则将第一个参数设置为NULL,程序会从上一次分割结束的位置('\0'之后)开始继续分割,若已经无法分割则返回NULL
返回值:分割所得到子字符串的地址.,若无法分割则返回NULL
举例:
  char s[] = "abc:bcd:ef bg_op fq:yz_dd";
  char t[] = ": _";
  char *score = NULL;
  /*第一次调用*/
  if((score = strtok(s,t)) == NULL)
  {
    printf("failed!\n");
    return 0;
  }
  printf("%s;",score);
  /*继续分割,将第一个参数这是为NULL*/
  while((score = strtok(NULL,t)))
  {
    printf("%s;",score);
  }

输出结果:
abc;bcd;ef;bg;op;fq;yz;dd;

6、字符串比较:strcmp函数, strncmp函数,strcasecmp函数,strncasecmp函数

(1)int strcmp(const char *s1,const char *s2);
函数说明:s1字符串与s2字符串从开头开始逐字符比较,先用s1的第一个字符的ASCII码的值与s2到第一个字符值到ASCII码值相减,若差值等于0,则继续用s1,s2字符串的第二个字符比较,若不等于0则返回差值。所有字符比较完后差值依然为0,但是其中一个字符串长度较长,如s2比s1多一个字符'a',那么返回差值0-'a'的值
返回值:若两个字符串完全相同则返回0,否则返回字符差值 
举例:
  char s1[] = "abcdefg";
  char s2[] = "abcdefgopq";
  char s3[] = "abcdefm";
  printf("s1与s2比较:%d\n",strcmp(s1,s2));
  printf("s1与s3比较:%d\n",strcmp(s1,s3));
  return 1;

输出结果:
s1与s2比较:-111

s1与s3比较:-6


(2) int strncmp(const char *s1,const char *s2,size_t n);
函数说明:原理与strcmp函数一样,只不过多了一个参数来限制比较用于比较的字符的个数不能超过n,如果两个字符串前n个字符完全一样则返回0,相比strcmp,strncmp函数灵活性更强。

返回值:若两个字符串完全相同则返回0,否则返回字符差值 


(3)int strcasecmp(char *s1, char *s2)
函数说明:与strcmp相似,只不过比较的时候忽略大小写差异

返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 


(4)int strncasecmp(char *s1, char *s2,size_t n)
函数说明:于strcasecmp函数相比,多了个参数限定比较字符的个数
返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 

7、字符串复制:strcpy函数、strncpy函数、strdup函数

(1)char *strcpy(char *dest, const char *src)
函数说明:将src字符串到内容拷贝到dest指向到字符串中,注:拷贝的长度由src字符串的'\0'空字符的位置决定,因此使用到时候要考虑到src末尾是否有空字符,并且考虑dest字符串的大小,有可能dest无法容纳src导致溢出
返回值:dest字符串的起始位置
举例:
char dest[50];
char src[] = "adfdasfa";
printf("%s",strcpy(dest,src));

输出结果: adfdasfa

(2)char *strncpy(char *dest, const char *src, size_t n)

函数说明:与strcpy用法类似,将src最多前n个字符拷贝到dest,如果src长度小于n则到'\0'为止,相比strcpy,strncpy函数安全性更高,使用更灵活
返回值:dest字符串的起始位置

(3)char *strdup(char *src)

函数说明:会调用malloc函数动态分配一块大小与src一样的内存,然后将src的内容拷贝到该块内存中,并将内存的起始地址返回,这意味着如果我们不再需要这个字符串的副本,我们最好使用free()将它释放。
返回值:复制成功后的字符串的地址,若失败则返回NULL

    转藏到我的图书馆 献花(0) 分享到微信 以文找文

    来自: 通信小兵 《c常用函数》

    推荐给朋友 举报

    上一篇:ubuntu下编译和使用libxml2


    所属头文件:<string.h>

    0、获取字符串长度:int strlen(char *s)

    int strlen(char *s)

    函数说明:此函数用于获取s的长度,不包括'\0'注:切记最好保证s的尾部是'\0',strlen函数读到'\0'会自动停止然后统计字符数
    返回值:字符数

    1、查找指定的字符:index函数,rindex函数,strchr函数 strrchr(其中index函数和strchr函数基本相同,rindex函数和strchr函数相同)

    (1)char *index(const char* s, char c) char *strchr(const char* s, char c)
    函数说明:index函数用于查找字符串s中第一个出现c字符的地址,然后将该字符的地址返回.strchr函数与index相似
    返回值:若找到指定到字符则返回该字符的地址,否则返回0
    举例: 
      char s[] = "abcdeabcde";
      char *sdest = NULL;
      sdest = index(s,'d');
      printf("sdest: %s\n",sdest);
    输出结果:sdest: deabcde
     
     (2)char *rindex(const char* s, char c) char *strrchr(const char* s, char c)

    函数说明:类似于index函数,但是他是从字符串开始查找字符c,并返回从字符串尾部开始第一个符合条件的字符的地址(strrchr与rindex相似)
    返回值:同index一样
    举例:
      char s[] = "abcdeabcde";
      char *sdest = NULL;
      sdest = rindex(s,'d');
      printf("sdest: %s\n",sdest);
    输出结果:sdest: de

    2、查找满足条件字符串中任意一个字符:strpbrk函数

    char *strpbrk(const char *s, const char *accept)
    函数说明:查找s字符串第一个符合accept字符串中任意一个字符的字符的地址
    返回值:符合条件的字符的地址
    举例:
      char s[] = "abcdefgefgbe";
      char t[] = "omgf";
      char *d = NULL;
      d = strpbrk(s,t);//应该会从s中找到‘f'字符的地址
      if(d != 0)
      {
        printf("原字符串: %s\n",s);
        printf("获得到字符串: %s\n",d);
      }
    输出结果:
    原字符串: abcdefgefgbe
    获得到字符串: fgefgbe

    3、统计字符串中连续包含或不包含指定字符串内容到字符数:strspn函数 ,strcspn函数

    (1)size_t strspn(const char *s, const char *accept)
    函数说明:从s的开头开始计算连续的字符,这些字符都属于accept中字符,遇到不是accept中的字符则停止,并返回字符个数n,即代表s开始处有连续n个属于accept字符串的字符.
    返回值:返回s字符串起始位置开始连续属于accept字符串的字符个数
    举例:
      char s[] = "abcdefgefgmmmmmbbe";
      char t[] = "bcdaefg";
      int inumber = 0;
      inumber = strspn(s,t);
      printf(" %d\n",inumber);
    输出结果:10

    (2)size_t strcspn(const char *s,const char *reject)

    函数说明:与strspn相反,从s的开头开始计算连续不属于reject的字符数,并返回字符个数n,即代表s开头处有n个不属于accept字符串的字符。
    返回值:返回s字符串起始位置开始连续不属于accept字符串到字符个数
    举例:
      char s[] = "abcdefgefgmqmmmmbbe";
      char t[] = "mq";
      int inumber = 0;
      inumber = strcspn(s,t);
      printf(" %d\n",inumber);
    输出结果:10

    4、查找指定字符串:char *strstr(const char *s, const char *need);

    函数说明:从s中找到与need匹配到子字符串,并将该子字符串的地址返回
    返回值:匹配的子字符串的起始地址
    举例:
      char s[] = "abcdefgefgmqmmmmbbe";
      char t[] = "fge";
      char *score = NULL;
      score = strstr(s,t);
      printf(" %s\n",score);
    输出结果:
     fgefgmqmmmmbbe

    5、字符串分割:char *strtok(char *s, const char *delim)

    函数说明:strtok函数将s按照delim字符串中的字符分割成一个个子字符串,对于字符串s,当遇到delim中到字符,则将该字符替换成'\0'然后返回'\0'之前的字符串子串。若继续分割,则将第一个参数设置为NULL,程序会从上一次分割结束的位置('\0'之后)开始继续分割,若已经无法分割则返回NULL
    返回值:分割所得到子字符串的地址.,若无法分割则返回NULL
    举例:
      char s[] = "abc:bcd:ef bg_op fq:yz_dd";
      char t[] = ": _";
      char *score = NULL;
      /*第一次调用*/
      if((score = strtok(s,t)) == NULL)
      {
        printf("failed!\n");
        return 0;
      }
      printf("%s;",score);
      /*继续分割,将第一个参数这是为NULL*/
      while((score = strtok(NULL,t)))
      {
        printf("%s;",score);
      }

    输出结果:
    abc;bcd;ef;bg;op;fq;yz;dd;

    6、字符串比较:strcmp函数, strncmp函数,strcasecmp函数,strncasecmp函数

    (1)int strcmp(const char *s1,const char *s2);
    函数说明:s1字符串与s2字符串从开头开始逐字符比较,先用s1的第一个字符的ASCII码的值与s2到第一个字符值到ASCII码值相减,若差值等于0,则继续用s1,s2字符串的第二个字符比较,若不等于0则返回差值。所有字符比较完后差值依然为0,但是其中一个字符串长度较长,如s2比s1多一个字符'a',那么返回差值0-'a'的值
    返回值:若两个字符串完全相同则返回0,否则返回字符差值 
    举例:
      char s1[] = "abcdefg";
      char s2[] = "abcdefgopq";
      char s3[] = "abcdefm";
      printf("s1与s2比较:%d\n",strcmp(s1,s2));
      printf("s1与s3比较:%d\n",strcmp(s1,s3));
      return 1;

    输出结果:
    s1与s2比较:-111

    s1与s3比较:-6


    (2) int strncmp(const char *s1,const char *s2,size_t n);
    函数说明:原理与strcmp函数一样,只不过多了一个参数来限制比较用于比较的字符的个数不能超过n,如果两个字符串前n个字符完全一样则返回0,相比strcmp,strncmp函数灵活性更强。

    返回值:若两个字符串完全相同则返回0,否则返回字符差值 


    (3)int strcasecmp(char *s1, char *s2)
    函数说明:与strcmp相似,只不过比较的时候忽略大小写差异

    返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 


    (4)int strncasecmp(char *s1, char *s2,size_t n)
    函数说明:于strcasecmp函数相比,多了个参数限定比较字符的个数
    返回值:在忽略大小写的情况下,若两个字符串完全相同则返回0,否则返回字符差值 

    7、字符串复制:strcpy函数、strncpy函数、strdup函数

    (1)char *strcpy(char *dest, const char *src)
    函数说明:将src字符串到内容拷贝到dest指向到字符串中,注:拷贝的长度由src字符串的'\0'空字符的位置决定,因此使用到时候要考虑到src末尾是否有空字符,并且考虑dest字符串的大小,有可能dest无法容纳src导致溢出
    返回值:dest字符串的起始位置
    举例:
    char dest[50];
    char src[] = "adfdasfa";
    printf("%s",strcpy(dest,src));

    输出结果: adfdasfa

    (2)char *strncpy(char *dest, const char *src, size_t n)

    函数说明:与strcpy用法类似,将src最多前n个字符拷贝到dest,如果src长度小于n则到'\0'为止,相比strcpy,strncpy函数安全性更高,使用更灵活
    返回值:dest字符串的起始位置

    (3)char *strdup(char *src)

    函数说明:会调用malloc函数动态分配一块大小与src一样的内存,然后将src的内容拷贝到该块内存中,并将内存的起始地址返回,这意味着如果我们不再需要这个字符串的副本,我们最好使用free()将它释放。
    返回值:复制成功后的字符串的地址,若失败则返回NULL

      转藏到我的图书馆 献花(0) 分享到微信 以文找文

      来自: 通信小兵 《c常用函数》

      推荐给朋友 举报

      上一篇:ubuntu下编译和使用libxml2

      0 0
      原创粉丝点击