1 strtok
来自Linux-2.5.0中的string.c
strtok函数的源码如下,其功能是对传进去的C风格字符串s进行分割,分割符由第二个参数ct给出网上找到的一段代码(http://zhidao.baidu.com/link?url=-kcqYo2nAhvDoxGS04TXg5nShuRmiJ3jPenuLvUlHkOwRQjK4jbssZgeNs1F_ue_P8QDaKIUhKjeS1bXLHKmua),介绍strtok的使用
/** * strtok - Split a string into tokens * @s: The string to be searched * @ct: The characters to search for * * WARNING: strtok is deprecated, use strsep instead. */ char * ___strtok; char * strtok(char * s,const char * ct) { char *sbegin, *send; sbegin = s ? s : ___strtok;//首次调用时s为真,所以sbegin指向s的首地址 if (!sbegin) { //如果sbegin为NULL值说明传递的字符串为空,直接返回 return NULL; } sbegin += strspn(sbegin,ct);//返回字符串sbegin中第一个不在指定字符串ct中出现的字符下标 if (*sbegin == '\0') { //如果sbegin已经为字符串结束符则返回 ___strtok = NULL; return( NULL ); } send = strpbrk( sbegin, ct);//依次检验字符串sbegin中的字符,当被检验字符在字符串ct中也包含时,则停止检验,并返回被包含的字符 if (send && *send != '\0') //将分割字符的位置置为'\0' *send++ = '\0'; //然后将send的指针向后移动一个位置 ___strtok = send; //将移动后的send赋给全局变量__strtoke,下一次循环调用时,由于传递给strtok的第一个参数为NULL,所以sbegin=___strtok,也就是上一次的位置send,直到将字符串分割完毕 return (sbegin); }
strtok的使用如下
#include <string.h> #include <stdio.h> main() { char s[]= "Wang NIang Huangddddangccccang ldldldang XXXXXXXX "; char *d= "ang ";//在s串中将包含有 "ang "的位置处加上NULL,注意空格的输出 char *p; p=strtok(s,d);//第一次调用,传要处理的串参数地址s while(p) { printf( "%s\n ",p); p=strtok(NULL,d); } getchar(); return 0; }
2 strtok_r
3 linux下hash_map键为string
http://blog.csdn.net/langwenjing/article/details/8290678
http://no001.blog.51cto.com/1142339/1073027/