(STL)采用字符串容器储存,设计算法判断该字符串是否为回本
时间: 2023-10-26 10:03:24 浏览: 45
判断一个字符串是否为回文可以采用双指针法,定义两个指针i和j,分别指向字符串的首尾字符,然后依次向中间移动指针,如果遇到不相等的字符则不是回文,如果一直移动到中间位置仍然没有不相等的字符,则是回文。
以下是参考代码:
```c++
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string s) {
int n = s.size();
int i = 0, j = n - 1;
while (i < j) {
if (s[i] != s[j]) {
return false;
}
i++;
j--;
}
return true;
}
int main() {
string s;
cin >> s;
if (isPalindrome(s)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
以上代码中,使用了STL中的string容器来储存字符串,函数isPalindrome()用于判断字符串是否为回文,如果是则返回true,否则返回false。在主函数中,首先从标准输入中读入一个字符串,然后调用isPalindrome()函数进行判断,最后输出结果。
相关问题
不用C++的STL库中的字符串和算法模块来删除字符串中的数字字符
如果不使用STL库中的字符串和算法模块,你可以使用字符数组来实现。具体方法如下:
```cpp
#include <iostream>
#include <cstring>
int main()
{
const int MAX_LEN = 100; // 字符串最大长度
char str[MAX_LEN + 1]; // 字符数组,最后一位留给'\0'
std::cout << "请输入一个字符串(不包含空格):" << std::endl;
std::cin >> str;
int len = strlen(str); // 字符串长度
int i = 0, j = 0;
while (i < len) {
if (str[i] < '0' || str[i] > '9') { // 如果不是数字字符
str[j++] = str[i]; // 将其复制到新字符串中
}
i++;
}
str[j] = '\0'; // 字符串末尾加上'\0'
std::cout << "删除数字字符后的字符串为:" << str << std::endl;
return 0;
}
```
在这个示例程序中,我们首先定义了一个字符数组`str`,并从标准输入流中读取一个字符串。然后,我们使用一个循环遍历字符串中的每个字符,如果该字符不是数字字符,则将其复制到新字符串中。最后,我们需要在新字符串的末尾加上一个'\0'字符,以表示字符串的结束。最终,我们输出新字符串到标准输出流中。
c++ stl 2个字符串 公共子串
c++ stl提供了一种简便的方式来找到两个字符串的公共子串,即使用string类中的find函数。find函数可以在一个字符串中查找另一个字符串的第一次出现位置。我们可以通过遍历其中一个字符串的所有子串,然后在另一个字符串中查找该子串是否存在来判断是否为公共子串。
具体的步骤如下:
1. 在主函数中定义两个字符串str1和str2,并初始化它们。
2. 使用两个嵌套循环遍历str1的所有子串,并分别将其存储在string类型的变量substr中。
3. 使用str2的find函数在str2中查找substr是否存在。如果存在,说明substr是两个字符串的公共子串,可以将其输出或保存。
4. 完成循环后,我们就可以得到所有的公共子串。
需要注意的是,该方法只能找到两个字符串的最短公共子串,如果需要找到所有的公共子串,需要进一步处理。另外,该方法的时间复杂度较高,因为涉及到了两个嵌套循环,所以在处理较长的字符串时效率可能较低。
总结:c++ stl提供了一种简便的方式来找到两个字符串的公共子串,即使用string类中的find函数。可以通过遍历其中一个字符串的所有子串,并在另一个字符串中查找子串是否存在来判断是否为公共子串。该方法的时间复杂度较高,处理较长的字符串时可能效率较低。