标题: 专题二:1、C语言字符处理获取指定字符串 [打印本页] 作者: 吻等离子 时间: 2022-3-10 13:16 标题: 专题二:1、C语言字符处理获取指定字符串 在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结。
使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行查找,那么应该使用 strchr 或 strrchr 函数。其中,strchr 函数原型的一般格式如下:
char *strchr(const char *s, int c);
它表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。
相对于 strchr 函数,strrchr 函数原型的一般格式如下:
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.”。
示例代码运行结果为:
strchr: ome any ideas from readers, of course.
strrchr: ourse.
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。运行结果为:
come:come any ideas from readers, of course.
icome:(null)
区别 strspn 与 strcspn 函数strspn 函数表示从字符串 s 的第一个字符开始,逐个检查字符与字符串 accept 中的字符是否不相同,如果不相同,则停止检查,并返回以字符串 s 开头连续包含字符串 accept 内的字符数目。其函数原型的一般格式如下:
size_t strspn(const char *s, const char *accept);
例如,该函数的定义如下:
从上面的示例代码中可以看出,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。因此,输出结果为:
I wel:5
Iwel:1
welcome:0
5:0
相对于 strspn 函数,strcspn 函数与之相反,它表示从字符串 s 第一个字符开始,逐个检查字符与 reject 中的字符是否相同,如果相同,则停止检查,并返回以字符串 s 开头连续不含字符串 reject 内的字符数目。其函数原型的一般格式如下:
size_t strcspn(const char *s, const char *reject);
该函数的定义如下:
从上面的代码中不难发现,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 内的字符数目。因此,其运行结果为:
I wel:0
Iwel:0
welcome:2
5:45
由此可见,对于 strspn 函数,如果找到了 reject 与 s 不相同元素时,指针停止移动,并返回以字符串 s 开头连续包含字符串 accept 内的字符数目;而 strncspn 函数则是找到了 reject 与 s 相同元素时,指针停止移动,并返回以字符串 s 开头连续不包含字符串 accept 内的字符数目。这一点一定要注意,千万不要混淆了。 作者: heicad 时间: 2022-3-18 03:42
好资料,51黑有你更精彩!!!