C语言输入两个字符串s1和s2(长度均小于20),判断s2是否是s1的子串,如果是,输出yes,否则输出no(不能用strstr函数)
时间: 2023-06-23 11:08:59 浏览: 123
C语言求两个字符串的最长公共子串
5星 · 资源好评率100%
您可以使用双重循环来实现查找子串的功能,具体思路如下:
1. 用两个循环分别遍历s1和s2。
2. 在s1中,如果找到一个字符与s2的第一个字符相等,则进一步比较s1和s2后面的字符是否一一对应,如果不对应,则继续在s1中找下一个与s2第一个字符相等的字符。
3. 如果在s1中找到一个字符与s2的第一个字符相等,并且s1和s2后面的字符一一对应,则说明s2是s1的子串。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char s1[20], s2[20];
int len1, len2, i, j, flag;
printf("请输入两个字符串s1和s2:\n");
scanf("%s%s", s1, s2);
len1 = strlen(s1);
len2 = strlen(s2);
flag = 0;
for (i = 0; i <= len1 - len2; i++) {
for (j = 0; j < len2; j++) {
if (s1[i + j] != s2[j]) {
break;
}
}
if (j == len2) {
flag = 1;
break;
}
}
if (flag) {
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}
```
在代码中,我们首先使用`scanf`函数从标准输入中读取两个字符串s1和s2,然后使用`strlen`函数获取它们的长度。
接下来,使用两个嵌套的循环遍历s1和s2。外层循环从0到len1-len2,因为当s1剩下的字符数小于s2的长度时,s2不可能是s1的子串。内层循环用来比较s1和s2后面的字符是否一一对应,如果不对应,则跳出内层循环继续在s1中查找。如果在s1中找到一个与s2匹配的子串,则将flag标记为1,跳出外层循环。
最后,根据flag的值输出结果。
阅读全文