C语言. 编写函数,判断在给定字符串中是否包含指定的子串

C语言. 编写函数,判断在给定字符串中是否包含指定的子串,第1张

#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);

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12176939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存