最近做一个项目,需要从文件中读取大量的数据,并获取指定类型的数据,其中用到了很多c语言中操作字符的函数。自己查了api,大致总结如下:
字符查找函数:
char *strchr( const char *str, int ch );
char* strrchr(const char* str,int ch);
size_t strcspn( const char *str1, const char *str2 );
size_t strspn( const char *str1, const char *str2 );
char *strstr( const char *str1, const char *str2 );
void *memchr( const void *buffer, int ch, size_t count );
char *strpbrk( const char *string, const char *strCharSet );
char *strtok( char *strToken, const char *strDelimit );
strchr和strrchr是对字符串搜索指定的字符在不在其中,返回值为找到的字符的地址,如果没有找到则返回NULL,一个是从前往后搜索一个是从后往前搜索。
以下是msdn中给出的代码:
Output
String to be searched: The quick brown dog jumps over the lazy fox 1 2 3 4 5 12345678901234567890123456789012345678901234567890 Search char: r Result: first r found at position 12 Result: last r found at position 30
strcspn函数返回的是在str1中第一个匹配到str2中任何字符的长度,而strspn返回的则是str1中第一个对str2中的任何一个字符都不匹配的长度。以下是msdn中的代码及其结果:
The portion of 'cabbage' containing only a, b, or c is 5 bytes long
strstr函数作用是搜索子字符串的位置,返回的是str1中str2的位置,如果没有搜索的子字符创则返回为NULL.
代码:
输出:
String to be searched: The quick brown dog jumps over the lazy fox 1 2 3 4 5 12345678901234567890123456789012345678901234567890 lazy found at position 36strpbrk函数用来搜索字符集中的字符在string中出现的位置,如果字符集中的所有字符都没有在string中出现,则返回NULL。代码:输出:1: The 3 men and 2 boys ate 5 pigs 2: 3 men and 2 boys ate 5 pigs 3: 2 boys ate 5 pigs 4: 5 pigsmemchr函数用来搜索buffer中c出现的位置,第3个参数count指明搜索的长度,如果搜索到了则返回字符出现的位置,否则为NULL。代码:输出:String to be searched: The quick brown dog jumps over the lazy fox 1 2 3 4 5 12345678901234567890123456789012345678901234567890 Search char: r Result: r found at position 12最后一个函数是strtok,这个也是我在项目中实际用到的函数,搜索下个指定字符的位置。请注意是下一个,也就是所第一次调用该函数的时候会搜索第一个,第二次调用,如果第一个参数为NULL,则会继续搜索下一个也就是第二个指定的字符,以此类推。代码:输出:A string of ,,tokens and some more tokens Tokens: A string of tokens and some more tokens