1.模拟strcmp
2.strstr
3.模拟strstr
接上篇,我们来接着学习一下字符串函数,今天ss将模拟实现一下srtcmp然后再进行介绍。
让我们回顾一下strcmp是怎么用的
回忆一下strcmp的应用规则。
我么首先要遍历两个字符串,也就是我们要一个字符一个字符的比较大小,在遇到'\0' 之前如果有不同的字符,则根据情况返回正整数或者负整数,如果遍历完了字符串,发现两个字符串一模一样,我们就要返回0;ok思路明确,代码实操。
int mystrcmp(char* arr1, char* arr2)
{
while (*arr1 == *arr2)
{
if (*arr1 == '\0')
return 0;
arr1++;
arr2++;
}
if (*arr1 > *arr2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "nihao";
char arr2[] = "nizaoa";
int d=mystrcmp(arr1, arr2);
int a=strcmp(arr1, arr2);
printf("%d %d", d,a);
return 0;
}
我们可以看到很简单就实现了。一开始就判断相不相等,只要不相等就跳出循环,进行判断。
2 strstr
这个库函数简单来说就是,字符串里面找另一个字符串。
int main()
{
char arr1[] = "abbcdef";
char arr2[] = "bc";
char* ret=strstr(arr1, arr2);
printf("%s", ret);
return 0;
}
我们可以看到,strstr返回的是一个地址,返回的是在arr1一中找到arr2 的地址。很是神奇。
3,让我们模拟实现一下 strstr
其实可以发现,如果这两个字符串中没有重复的字符连在一起,我们只需要遍历字符串1就可以了,找到第一个字符相同的,看看后面相同不相同。
如果像ss举例,大家就会发想如果像往常那样遍历,就不好判断出来,那么我们再定义三个指针,一个arr1,一个arr2,最后一个负责切换遍历arr1的起始位置。
我们只需要一直找,找到和字符串二相同的字符,开始遍历,每次遍历
char* mystrstr(char* arr1, char* arr2)
{
char* p3 = arr1;
while (*p3)
{
char* p2 = arr2;
char* p1 = p3;
while (*p1==*p2)
{
p1++;
p2++;
}
if (*p2 == '\0')
return p3;
p3++;
}
return NULL;
}
int main()
{
char arr1[] = "abbcdef";
char arr2[] = "bc";
char* ret=mystrstr(arr1, arr2);
printf("%s", ret);
return 0;
}
,就换一次p1的起始位置,便可以防止重复字符堆积出现的情况。好了思路清晰,代码实操
好了我们也是实现了strstr。谢谢观看。