字符和字符串函数及其模拟实现(2)
前言
本文接着学习字符和字符串函数,并用代码模拟实现。主要学习内容包括:
4、 字符串查找
- strstr
- strtok
5、错误信息报告
- strerror
6、字符操作函数
7、内存操作函数
- memcpy
- memmove
- memset
- memcmp
4、字符串查找
4.1 库函数 strstr
char * strstr ( const char *str1, const char * str2);
- 返回指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回空指针
int main()
{
char a1[] = "abbbcdef";
char a2[] = "bbc";
char* ret = strstr(a1, a2);
if (NULL==ret)
{
printf("找不到子字串\n");
}
else
{
printf("%s\n", ret);
}
}
4.2 模拟实现库函数 strstr
char* my_strstr(const char* p1, const char* p2)
{
assert(p1&&p2);
const char* s1 = p1;//赋予指针初始位置
const char* s2 = p2;//赋予指针初始位置
const char* cur = p1;//记录字符串当前指针位置
while (*cur)
{
s1 = cur;
s2 = p2;//移到初始位置
while (*s1 && *s2 && (*s1==*s2))
{
s1++;//相等时,指针后移,直到两个不相等或者一方为0
s2++;
}
if (*s2=='\0')
{
return (char*)cur;
}
cur++;//不相等,当前指针加1
}
//跳出,就是字符串1移动到末尾
return NULL;
}
int main()
{
char a1[] = "abbbcdef";
char a2[] = "bbc";
char* ret = my_strstr(a1, a2);
if (NULL==ret)
{
printf("找不到子字串\n");
}
else
{
printf("%s\n", ret);
}
}
结果见下图:
4.3 库函数 strtok
char * strtok ( char * str, const char * sep );
- sep参数是个字符串,定义了用作分隔符的字符集合第一个参数指定一个字符串,它包含了0