C语言编程,有两个字符串s1和s2,编写程序判断s1是否是s2的子串,是的话输出s1在s2的起始位置,否则输出-1

 我来答
冷叶忆雪
推荐于2017-09-17 · TA获得超过1018个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:159万
展开全部

看代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int is_sub_str(char* s1, char* s2)
{
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    if (len1 > len2)
    {
        return -1;
    }
    int i = 0, j = 0; // i 是 s1 的位置,j 是 s2 的位置
    while (j < len2 - len1 + 1)
    {
        while (i < len1 && s1[i] == s2[j])
        {
            ++i;
            ++j;
        }
        if (i == len1)
        {
            return j - len1;
        }
        else
        {
            j = j - i + 1; // 到上次开始判断字符的下一个字符
            i = 0;
        }
    }
    return -1;
}
int main(int argc, char** argv)
{
    int r = is_sub_str("23", "234567");
    printf ("%d\n", r);

    r = is_sub_str("23", "abc123bc");
    printf ("%d\n", r);

    r = is_sub_str("223", "22abc223");
    printf ("%d\n", r);

    r = is_sub_str("1234", "23");
    printf ("%d\n", r);

    return 0;
}

运行:

这是暴力法,但是从经验来看一般情况下效率也不会很低。至于更高效的 KMP 算法,很难懂,可以自己找资料了解。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式