字符串操作函数集锦

来源:互联网 发布:桥豆麻袋 陈粒 知乎 编辑:程序博客网 时间:2024/06/11 11:21

所有C语言标准库支持的字符串操作都在string.h中,这个文件在/usr/include/下。确切的说,这个文件还包含对数组的访问。所包含的函数分为以下几类:复制、连接、比较、查找等。


1 复制

void * memcpy ( void * destination, const void * source, size_t num );void * memmove ( void * destination, const void * source, size_t num );char * strcpy ( char * destination, const char * source );char * strncpy ( char * destination, const char * source, size_t num );

  • memcpy:从source处拷贝num字节的数据到destination。
  • memmove: 和memcpy一样。但当source和destination出现内存区域重叠时,也能正确处理。
  • strcpy: 从source处将字符串拷贝到destination处,拷贝过程一直持续到source中null字符为止。
  • strncpy: 从source处拷贝num个字符到destination处。若在拷贝过程中source中有null字符,destination使用0补齐到num个字符处。

2 连接

char * strcat ( char * destination, const char * source );char * strncat ( char * destination, char * source, size_t num );

  • strcat: 把source传复制并连接到destination后,destination串结尾处的null字符将被source的第一个字符覆盖。source串的某尾处将被添加新的null字符。返回destiination串的指针。
  • strncat: 把source的前num个字符复制禀连接到destination后,关于null的操作和strcat相同。

3 比较

int memcmp ( const void * ptr1, const void * ptr2, size_t num );int strcmp ( const char * str1, const char * str2 );int strcoll ( const char * str1, const char * str2 );int strncmp ( const char * str1, const char * str2, size_t num );size_t strxfrm ( char * destination, const char * source, size_t num );

  • memcmp:比较ptr1和ptr2的前num个字节。若二者相等,返回0;否则返回ptr1和ptr2中第一个不相等字节的比较结果。
  • strcmp:比较字符串ptr1和ptr2。若二者长度和字符都相等,返回0;否则返回ptr1和ptr2中第一个不相等字符的比较结果。
  • strcoll:根据LCCOLLATE指定的文字排序规则次序比较str1和str2,在LCCOLLATE为“POSIX”或者c时与strcmp作用一模一样。
  • strncmp:比较ptr1和ptr2的前num个字符。若二者相等,返回0;否则返回ptr1和ptr2中第一个不相等字符的比较结果。
  • strxfrm:字符串转换。从source中转换num个字符到destination中,使得strxfrm()转换后,strcmp的结果和直接使用strcoll的结果相同。

4 查找

const void * memchr ( const void * ptr, int value, size_t num );const char * strchr ( const char * str, int character );size_t strcspn ( const char * str1, const char * str2 );const char * strpbrk ( const char * str1, const char * str2 );const char * strrchr ( const char * str, int character );size_t strspn ( const char * str1, const char * str2 );const char * strstr ( const char * str1, const char * str2 );char * strtok ( char * str, const char * delimiters );

  • memchr: 在ptr指向的num个存储空间内查找第一个值为value的字节,并返回指向它的指针。
  • strchr: 查找str指向字符串中第一个字符为character的位置,返回指向该位置的指针。
  • strcspn: 扫描str1字符串,找到首次出现任意str2中字符的位置,返回str1中这个位置前的字符个数。
  • strpbrk: 扫描str1字符串,找到首次出现任意str2中字符的位置,返回指向该位置的指针,如找不到,返回NULL。
  • strrchr:查找str指向字符串中最后一个字符为character的位置,返回指向该位置的指针。
  • strspn: 找出str1中从第一次出现str2中字符开始,连续出现str2中字符的长度,返回该长度。
  • strstr: 找出str2中第一次出现str1的位置,返回指向该为止的指针,若不含有,返回NULL。
  • strtok: 用法很诡异的一个函数。如下例子。这个函数用于分割字符串,需要循环调用完成分割。循环调用时,传入的字符串为NULL。很好奇这个函数如何实现的:)
/* strtok example */#include <stdio.h>#include <string.h>int main (){  char str[] ="- This, a sample string.";  char * pch;  printf ("Splitting string \"%s\" into tokens:\n",str);  pch = strtok (str," ,.-");  while (pch != NULL)  {    printf ("%s\n",pch);    pch = strtok (NULL, " ,.-");  }  return 0;}

5 其他函数

void * memset ( void * ptr, int value, size_t num );char * strerror ( int errnum );size_t strlen ( const char * str );

  • memset:从ptr开始,把连续num个字节的内存设置为值value,返回ptr
  • strerror: 根据errum,返回一个静态的字符串,这个字符串可以是一些错误提示,都是字符串常量。
  • strlen: 返回字符串str的长度。长度通过NULL字符来定位。

0 0
原创粉丝点击