#include<stdioh>
#include<stringh>
int main(){
char str[100],s[100],i,j,flag=0;
printf("请输入主串:\n");
gets(str);
printf("请输入字串:\n");
gets(s);
i=0,j=0;
while(i<strlen(str) && j<strlen(s)){
if(str[i] == s[j]){//如果字符相同则两个字符都增加
i++;
j++;
}
else{
i=i-j+1; //主串字符回到比较最开始比较的后一个字符
j=0; //字串字符重新开始
}
if(j == strlen(s)){//如果匹配成功
flag=1; //字串出现
break;
}
}
if(flag==1) printf("%s中包含%s\n",str,s);
else printf("%s中不包含%s\n",str,s);
return 0;
}
strcmp的规则是:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
strcmp(str1,str2)是str1小于str2时返回小于零的值,大于返回大于零的值,此题中t指的就是s2,B选项s1s2位置反了。D是对的。
/解决一般长度的可以。。因为使用了朴素的字符串匹配算法,所以效率不算高,KMP算法更好一些。
以下是源码:/
/strstr function/
#include<stringh>
char (strstr)(const char s1, const char s2)
{ / find first occurrence of s2[] in s1[] /
if (s2 == '\0')
return ((char)s1);
for (; (s1 = strchr(s1, s2)) != NULL; ++s1){/match rest of prefix/
const char sc1, sc2;
for (sc1 = s1, sc2 = s2;;)
if (++sc2 == '\0')
return ((char )s1);
else if (++sc1 != sc2)
break;
}
return (NULL);
}
/strchr function/
#include<stringh>
char (strchr)(const char s, int c)
{ / find first occurrence of c in char s[] /
const char ch = c;
for (; s != ch; ++s)
if (s == '\0')
return (NULL);
return ((char) s);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)