char *strchr(const char *s, int c);
它表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。char *strrchr(const char *s, int c);
与 strchr 函数一样,它同样表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。但两者唯一不同的是,strrchr 函数在字符串 s 中是从后到前(或者称为从右向左)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置。下面的示例代码演示了两者之间的区别:int main(void) { char str[] = "I welcome any ideas from readers, of course."; char *lc = strchr(str, 'o'); printf("strchr: %s\n", lc); char *rc = strrchr(str, 'o'); printf("strrchr: %s\n", rc); return 0; }对于上面的示例代码,strchr 函数是按照从前到后的顺序进行查找,所以得到的结果为“ome any ideas from readers,of course.”; 而 strrchr 函数则相反,它按照从后到前的顺序进行查找,所以得到的结果为“ourse.”。
char *strpbrk(const char *s1,const char *s2);
例如,在 strpbrk 函数的定义如下:char *strpbrk (const char *s, const char *accept) { while (*s != '\0') { const char *a = accept; while (*a != '\0') if (*a++ == *s) return (char *) s; ++s; } return NULL; }如上面的代码所示,strpbrk 数首先依次循环检查字符串 s 中的字符,当被检验的字符在字符串 accept 中也包含时(即“if(*a++==*s)”),则停止检验,并返回“(char*)s”。如果没有匹配字符,则返回空指针 NULL。这里需要注意的是,空字符 null('\0')不包括在内。函数的调用示例如下面的代码所示:
int main(void) { char str[] = "I welcome any ideas from readers, of course."; char *rc=strpbrk(str,"come"); printf("%s\n",rc); return 0; }很显然,示例代码的运行结果为“elcome any ideas from readers,of course.”。
char *strstr(const char *haystack, const char *needle);
strstr 函数的调用示例如下面的代码所示:int main(void) { char str[] = "I welcome any ideas from readers, of course."; char *c1=strstr(str, "come"); printf("come:%s\n",c1); char *c2=strstr(str, "icome"); printf("icome:%s\n",c2); return 0; }这里需要注意的是,因为 strstr 函数与 strpbrk 函数不同,strstr 函数匹配的是字符串,所以语句“strstr(str,"icome")”将返回 NULL。运行结果为:
size_t strspn(const char *s, const char *accept);
例如,该函数的定义如下:size_t strspn (const char *s,const char *accept) { const char *p; const char *a; size_t count = 0; for (p = s; *p != '\0'; ++p) { for (a = accept; *a != '\0'; ++a) if (*p == *a) break; if (*a == '\0') return count; else ++count; } return count; }从上面的示例代码中可以看出,strspn 函数从字符串参数 s 的开头计算连续的字符,而这些字符完全是 accept 所指字符串中的字符。简单地说,如果 strspn 函数返回的数值为 n,则代表字符串 s 开头连续有 n 个字符都属于字符串 accept 内的字符。
int main(void) { char str[] = "I welcome any ideas from readers, of course."; printf("I wel:%d\n",strspn(str,"I wel")); printf("Iwel:%d\n",strspn(str,"Iwel")); printf("welcome:%d\n",strspn(str,"welcome")); printf("5:%d\n",strspn(str,"5")); return 0; }在上面的示例代码中,因为 strspn 函数返回的是以字符串 s 开头连续包含字符串 accept 内的字符数目。而源字符串 str 中的“I”与“welcome”之间有一个空格(即“I welcome”),所以,语句“strspn(str,"Iwel")”将返回 1,而语句“strspn(str,"I wel")”将返回 5。因此,输出结果为:
size_t strcspn(const char *s, const char *reject);
该函数的定义如下:size_t strcspn (const char *s,const char *reject) { size_t count = 0; while (*s != '\0') if (strchr (reject, *s++) == NULL) ++count; else return count; return count; }从上面的代码中不难发现,strcspn 函数正好与 strspn 函数相反。strcspn 函数从字符串参数 s 的开头计算连续的字符,而这些字符都完全不在参数 reject 所指的字符串中。简单地说,如果 strcspn 函数返回的数值为 n,则代表字符串 s 开头连续有 n 个字符都不包含字符串 reject 内的字符。
int main(void) { char str[] = "I welcome any ideas from readers, of course."; printf("I wel:%d\n",strcspn(str,"I wel")); printf("Iwel:%d\n",strcspn(str,"Iwel")); printf("welcome:%d\n",strcspn(str,"welcome")); printf("5:%d\n",strcspn(str,"5")); return 0; }在上面的示例代码中,因为 strcspn 函数返回的是以字符串 s 开头连续不包含字符串 accept 内的字符数目。因此,其运行结果为:
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有