今天我们来说一下一些字符串处理函数今天所探讨的函数是除了我前面两篇博客之外的字符串函数
前两篇博客如下:字符串函数的实现 长度受限的字符串函数的实现另外,还有这一篇中所写的常用的内存操作函数
关于查找一个字符,我们这里有两种清况,查找一个字符第一次出现的情况,还有一个是查找字符最后一次出现的情况。
函数原型:
char *strchr(char const *str,int ch);
strchr()函数在字符串str中查找字符ch第一次出现的位置,找到以后函数返回一个指向该位置的指针。如果 该字符并不存在于字符串,函数就返回一个NULL指针。
函数实现:
//实现strchr()函数,查找一个特定字符第一次出现的位置
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strchr(const char *str, int ch)
{
assert(str);
const char* ret = str;
while (*ret)
{
if (*ret == ch)
{
return (char *)ret;
}
else
ret++;
}
return NULL;
}
int main()
{
char *str = "abcdef";
printf("%s", my_strchr(str, 'd'));
system("pause");
return 0;
}
有了查找第一次出现的函数,当然也就有了查找最后一次出现的函数了。
函数原型:
char *strrchr(const char *str,int ch);
strrchr()函数功能上和strchr()函数一致,只是返回的是一个指向字符串中该字符最后一次出现的位置,如果该字符并不存在,那么返回为NULL指针。
//实现strrchr()函数,查找一个特定字符最后一次出现的位置
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strrchr(const char *str, char ch)
{
assert(str);
const char* p = str;
char *q = NULL;
while (*p)
{
if (*p == ch)
{
q =(char *) p;
p++;
}
else
p++;
}
if (*q)
{
return q;
}
else
return NULL;
}
int main()
{
char *str = "abcdaaaaaaef";
printf("%s", my_strrchr(str, 'a'));
system("pause");
return 0;
}
strpbrk()函数是一个用来查找一组字符第一次在字符串中出现的位置。
函数原型
char *strpbrk(const char *s1,const char *s2);
如果s1、s2含有相同的字符,那么返回指向s1中第一个相同字符的指针,否则返回NULL。
注意:strpbrk()不会对结束符’\0’进行检索。
示例:
#include<stdio.h>
#include<string.h>
int main(void){
char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
char* s2 = "see";
char* p = strpbrk(s1,s2);
if(p){
printf("The result is: %s\n",p);
}else{
printf("Sorry!\n");
}
return 0;
}
函数原型
size_t strspon(char const *str,char const *group);
strspn() 函数用来计算字符串 str 中连续有几个字符都属于字符串 group。
strspn() 从参数 str 字符串的开头计算连续的字符,而这些字符都完全是 group所指字符串中的字符。简单的说,若 strspn() 返回的数值为n,则代表字符串 str 开头连续有 n 个字符都是属于字符串 group内的字符。
从函数原型,我们可以看出,返回size_t类型的值,所以,返回字符串 str 开头连续包含字符串 group内的字符数目。所以,如果 str 所包含的字符都属于 group,那么返回 str 的长度;如果 str 的第一个字符不属于 group,那么返回 0。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
int i;
char str[] = "12h";
char group[] = "1234890";
i = strspn(str, group);
printf("str 前 %d 个字符都属于 accept\n",i);
system("pause");
return 0;
}
对于strcspn()函数而言,刚好和strspn()函数相反。
函数原型
size_t strcspn(const char *str, const char *group);
strcspn() 从字符串 str 的开头计算连续的字符,而这些字符都完全不在字符串 group 中。简单地说,若 strcspn() 返回的数值为 n,则代表字符串 str 开头连续有 n 个字符都不含字符串 group中的字符。
返回字符串 str 开头连续不含字符串 group 内的字符数目。
注意:如果 str 中的字符都没有在 group中出现,那么将返回 str 的长度;