查找一个字符的函数:
char *strchr(char const *src, int ch);
char *strrchr(char const *src, int ch);
注意它们的第二个参数是一个整型而非char。strchr在字符串src中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符并不存在于字符串中,则返回NULL指针。strrchr功能与strchr基本一致,只是他所返回的是一个指向字符串中该字符最后一次出现的位置。看下面一个简单例子:
char str[20] = "Hello there, honey.";
char *ans, *r_ans;
ans = strchr(str, 'h');
r_ans = strrchr(str, 'h');
查找任何几个字符:
char *strpbrk( const char * string, const char * group);
这个函数返回一个指向string中第一个匹配group中任何一个字符的字符位置。如果未找到匹配,返回一个NULL指针。下面这段代码中:
char str[20] = "Hello there, honey.";
char *ans;
ans = strpbrk(str, "aeiou");
返回的位置是string+1,因为这个位置的字符'e'是第二个参数中的字符第一次出现的位置。
查找一个子串:
char *strstr(char const *s1, char const *s2);
这个函数在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针。如果s2并没有完整的出现在s1的任何地方,该函数将返回一个NULL指针。如果s2是一个空字符串,函数就返回s1.
查找标记:
一个字符串中常常包括几个单独的部分,他们彼此被分隔开来。每次为了处理这些部分,你首先必须把他们从字符串中提取出来,这个任务仍是strtok函数的功能。它从字符串中隔离各个单独的成为标记(token)的部分,并丢弃分隔符。原型如下:
char *strtok(char *str, char const *sep);
strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个指向这个标记的指针。典型情况下,在第一次调用strtok时,向它传递一个指向字符串的指针,然后,这个函数被重复调用(第一个参数为NULL),直到它返回NULL为止。如下代码所示:
void print_tokens(char *line)
{
static char whitespace[] = " \t\f\r\v\n";
char *token;
for (token = strtok(line, whitespace); token != NULL; token = strtok(NULL, whitespace))
printf("Next token is %s\n", token);
}