C语言编程,有两个字符串s1和s2,编写程序判断s1是否是s2的子串,是的话输出s1在s2的起始位置,否则输出-1
1个回答
展开全部
看代码:
#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 算法,很难懂,可以自己找资料了解。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询