用c++编写代码,实现函数,输入两串字符串,判断前一个是否是后一个子
时间: 2024-09-15 15:08:37 浏览: 46
C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现
5星 · 资源好评率100%
在C++中,你可以通过以下步骤编写一个简单的函数来判断第一个字符串是否是第二个字符串的子序列。我们将使用`std::string`类以及迭代器来遍历字符串。这里是一个基本的示例:
```cpp
#include <iostream>
#include <string>
bool isSubsequence(const std::string& str1, const std::string& str2) {
if (str1.empty()) return true; // 如果str1为空,它是任意非空字符串的子序列
// 使用str2的迭代器作为基准
for (const char* it = str2.cbegin(); it != str2.cend(); ++it) {
if (*it == str1[0]) {
// 如果找到匹配字符,移动str1的指针到下一个字符
str1.erase(0, 1);
if (str1.empty()) return true; // 如果str1现在为空,说明找到了子序列
}
}
// 如果str1还有剩余,说明str1不是str2的子序列
return str1.empty();
}
int main() {
std::string str1, str2;
std::cout << "请输入第一个字符串: ";
std::getline(std::cin, str1);
std::cout << "请输入第二个字符串: ";
std::getline(std::cin, str2);
bool result = isSubsequence(str1, str2);
if (result)
std::cout << str1 << " 是 " << str2 << " 的子序列.\n";
else
std::cout << str1 << " 不是 " << str2 << " 的子序列.\n";
return 0;
}
```
在这个代码中,我们首先检查`str1`是否为空,如果是,则认为它总是另一个字符串的子序列。然后我们逐个比较`str2`的字符与`str1`的第一个字符。如果找到匹配,我们就从`str1`中移除已处理的字符。如果遍历完`str2`而`str1`仍然非空,那么`str1`就不是`str2`的子序列。
阅读全文