c++ 输入任意两个字符串S1和S2,请判断S2是否是S1的子串,是输出YES,不是输出NO。
时间: 2024-03-23 21:37:33 浏览: 34
好的,这是一个简单的字符串匹配问题,可以使用C++的string类和string的find函数来实现。以下是示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1, s2;
getline(cin, s1); // 输入第一个字符串
getline(cin, s2); // 输入第二个字符串
if (s1.find(s2) != string::npos) { // 如果s2是s1的子串
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
```
在上面的代码中,我们首先使用getline函数分别输入两个字符串s1和s2,然后使用string的find函数来查找s2在s1中的位置,如果返回值不为string::npos,说明s2是s1的子串,输出"YES",否则输出"NO"。
相关问题
从键盘输入两个字符串S1和S2,判断S1和S2是否存在子串关系
ChatGPT: 可以使用字符串的find函数来判断S1和S2是否存在子串关系,如果S1中包含S2,则返回S2在S1中的起始位置,否则返回nil。示例代码如下:
```lua
local s1 = io.read()
local s2 = io.read()
if s1:find(s2) then
print("S2是S1的子串")
else
print("S2不是S1的子串")
end
```
注意:以上代码为Lua语言,如果您使用的是其他编程语言,请参考对应语言的字符串查找函数。
C语言输入两个字符串s1和s2(长度均小于20),判断s2是否是s1的子串,如果是,输出yes,否则输出no(不能用strstr函数)
您可以使用双重循环来实现查找子串的功能,具体思路如下:
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的值输出结果。