看了半天解析没懂意思,我看了之后感觉他的意思是判断第二个字符串有几个字符。是不是这样
应该是最求短字符的个数,假设第一个字符的长度为1,那么只执行一次while循环,结果c=1
大致流程肯定表达没错,有什么细节上我没表达清楚或者你有疑问的地方,可以继续问我。
#include<stdio.h>
int fun(char* s, char* t)//接受两个字符串的地址,这个函数的功能是查找左字符串中有多少个右字符串
{
int c = 0;//C是计数器
char* p, * q;
while (*s)//这个while语句从左到右遍历左字符串
{
p = s; q = t;//复制参数中的两个指针到两个新的指针中,避免对原指针的修改
while (*p && *q && *p++ == *q++);/*
如果两个字符都不为NULL,且两字符相等,则开始循环(每一次循环指针都会 + 1指向下一个字符)
,直到两个字符不相等或者其中至少有一个字符为NULL*/
if (!*q)c++;//如果右字符不为NULL,则代表右字符串遍历完了,且都在左边找到了对应值,这个时候计数器+1
s++;/*如果不是上面那种情况,那就说明在右字符串还没遍历完循环就结束了,说明没有在左边找到完全一一对应,于是s + 1,
进入下一个循环,从左字符串中下一个字符开始继续*/
}
return c;
}
void main()
{
char* str1 = "celebration meeting", * str0 = "ti";
printf("%d\n", fun(str1, str0));
}
这是判断第一个字符串里有几个第二个字符串的,当*p++==*q++在第一个字符串出现ti时q才会++,最后q判断完才为去[3]=0,if才去++c;