C++任意读入两个字符串,存放到两个一维字符数组中,然后判断短一些的串是否为长一些串的子串。
时间: 2024-05-14 20:19:55 浏览: 96
可以使用C++标准库中的`std::string`来实现。可以使用`std::getline()`函数来读入字符串,并使用`size()`函数获取字符串长度,然后进行判断。
以下是示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1, str2;
// 读入字符串
cout << "请输入第一个字符串:" << endl;
getline(cin, str1);
cout << "请输入第二个字符串:" << endl;
getline(cin, str2);
// 判断短串是否为长串的子串
if (str1.size() > str2.size()) {
swap(str1, str2); // 交换两个字符串
}
if (str2.find(str1) != string::npos) {
cout << "短串是长串的子串" << endl;
} else {
cout << "短串不是长串的子串" << endl;
}
return 0;
}
```
运行示例:
```
请输入第一个字符串:
hello
请输入第二个字符串:
hello world
短串是长串的子串
```
相关问题
c++任意读入两个字符串,存放到两个一维字符数组中,然后判断短一些的串是否为长一些串的子串
好的,我可以帮你解决这个问题。以下是一个基本的C++程序,可以实现你所需的功能:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[100], str2[100];
int len1, len2;
bool isSubstring = false;
cout << "请输入第一个字符串:";
cin >> str1;
cout << "请输入第二个字符串:";
cin >> str2;
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 > len2) {
for (int i = 0; i < len1 - len2 + 1; i++) {
if (strncmp(str1 + i, str2, len2) == 0) {
isSubstring = true;
break;
}
}
} else {
for (int i = 0; i < len2 - len1 + 1; i++) {
if (strncmp(str2 + i, str1, len1) == 0) {
isSubstring = true;
break;
}
}
}
if (isSubstring) {
cout << "短字符串是长字符串的子串" << endl;
} else {
cout << "短字符串不是长字符串的子串" << endl;
}
return 0;
}
```
在这个程序中,我们首先定义了两个字符数组 `str1` 和 `str2`,分别用于存储输入的两个字符串。然后,我们使用 `strlen` 函数求出两个字符串的长度,接着使用 `strncmp` 函数判断短字符串是否为长字符串的子串。如果是,我们将变量 `isSubstring` 设置为 `true`,否则为 `false`。最后,根据 `isSubstring` 的值输出相应的结果。
需要注意的是,本程序中使用了 `strncmp` 函数而不是 `strcmp` 函数,这是因为 `strcmp` 函数比较的是整个字符串,而 `strncmp` 函数可以指定比较的长度,避免了比较多余部分的时间浪费。
任意读入两个字符串,存放到两个一维字符数组中,然后判断短一些的串是否为长一些串的子串。
可以使用字符串匹配算法,比如暴力匹配、KMP算法、Boyer-Moore算法等。下面以暴力匹配为例,介绍一种实现方法:
1. 输入两个字符串,并分别计算它们的长度。
```c++
char str1[100], str2[100];
int len1, len2;
cout << "请输入字符串1: ";
cin >> str1;
len1 = strlen(str1);
cout << "请输入字符串2: ";
cin >> str2;
len2 = strlen(str2);
```
2. 判断哪个字符串比较短,然后对短的字符串进行遍历匹配。
```c++
char *short_str, *long_str;
int short_len, long_len;
if (len1 < len2) {
short_str = str1;
short_len = len1;
long_str = str2;
long_len = len2;
} else {
short_str = str2;
short_len = len2;
long_str = str1;
long_len = len1;
}
for (int i = 0; i <= long_len - short_len; i++) {
bool is_match = true;
for (int j = 0; j < short_len; j++) {
if (short_str[j] != long_str[i+j]) {
is_match = false;
break;
}
}
if (is_match) {
cout << "短字符串是长字符串的子串" << endl;
return 0;
}
}
cout << "短字符串不是长字符串的子串" << endl;
```
3. 在长字符串中遍历匹配短字符串,如果找到匹配的子串,则输出结果;否则输出短字符串不是长字符串的子串。
完整代码如下:
阅读全文