1、strstr (判断是否是子串)
类型:char* strstr(const char* str1,const char* str2)
返回的类型是指针(地址)[如果能找到子串arr2,就返回子串首次出现时首元素地址]。
1.1 功能实现
#include <stdio.h>
int main()
{
char arr1[] = "abcdeqabcdef";
char arr2[] = "cde";
char* ret = strstr(arr1,arr2);
if (NULL==ret)
{
printf("找不到该子串\n");
}
else
{
printf("%s\n",ret);
}
return 0;
}
1.2 模拟过程
#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1,const char* str2)
{
// s1(指向) : a bcdf a bcde
// s2(指向) : bcde
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* cur = str1; //cur指针:用来存放arr2在arr1中首次出现时首元素的地址
while (*cur!='\0')
{
s1 = cur;
s2 = str2; //当进入循环,但最终未匹配成功,s2返回到开头。
while (*s1 && *s2 && (*s1==*s2)) //当满足s1==s2时,需要提前满足 s1!='\0' 【s1=='\0'意味着已经查找完了,还没查到字串】
{ //【s2!='\0'意味着已经查找到子串了】。
s1++;
s2++;
}
if (*s2=='\0')
{
return (char*)cur;
}
cur++;
}
return NULL; //找不到
}
int main()
{
char arr1[] = "abcdfabcde";
char arr2[] = "bcde";
char* ret = my_strstr(arr1,arr2);
if (NULL==ret)
{
printf("找不到该子串\n");
}
else
{
printf("%s\n",ret);
}
return 0;
}
2、strtok(字符串切割)
类型:char* strtok(char* str,const char* sep)
(注:)str指向的字符串是被切割的字符串;sep指定的字符串是分隔符集合的字符串。
#include <stdio.h>
int main()
{
char arr[] = "zpengwei@yeah.net-123.456@567";
char buf[50] = {0};
strcpy(buf,arr);
const char* sep = "@.-";
char* str = NULL;
for (str=strtok(buf,sep);str!=NULL;str=strtok(NULL,sep))
{
printf("%s\n",str);
}
//printf("%s\n",strtok(buf,sep)); //只找第一个标记
//printf("%s\n",strtok(NULL,sep));//是从保存好的位置开始继续往后找
//printf("%s\n",strtok(NULL,sep));//是从保存好的位置开始继续往后找
//......
return 0;
}
3、strerror(错误信息查找)
返回错误信息(字符串)的首字符地址
配合错误码:errno 使用(当库函数调用时出错时)
(1)具体数字的错误码
#include <stdio.h>
int main()
{
printf("%s\n",strerror(0));
printf("%s\n",strerror(1));
printf("%s\n",strerror(2));
return 0;
}
(2)错误码:errno
#include <stdio.h>
#include <limits.h>
#include <errno.h>
int main()
{
int* p = (int*)malloc(INT_MAX);//向堆区申请内存空间
if (NULL==p)
{
printf("%s\n",strerror(errno));
}
return 0;
}
本文介绍了C语言中的几个关键字符串处理函数:strstr用于查找子串,strtok用于切割字符串,而strerror则用于获取错误信息。通过示例代码展示了这些函数的功能实现和使用方法。

被折叠的 条评论
为什么被折叠?



