检查给定字符串是否为回文c++迭代法

Check if given string is palindrome c++ iterative method

#include<iostream>
#include<string>
using namespace std;
int main(){

string str;
cout << "Enter a string: ";
getline(cin, str);

int length = str.length();
string temp;
int k = 0;
for(int i = length-1; i>=0; i--){
    
    temp[++k] = str[i];
    
}

cout<<temp;
    
return 0;

}

其实我想知道给定的字符串是否是回文,所以我将第一个字符串倒序存储在第二个字符串中,然后最终检查它们是否相等,但是我我什至无法打印出临时字符串

的结果

您定义了类型为 std::string

的空对象
string temp;

因此您不能在循环中对空对象使用下标运算符。

int k = 0;
for(int i = length-1; i>=0; i--){
    
    temp[++k] = str[i];
    
}

使用你的方法你可以写

string temp( str.rbegin(), str.rend() );

不使用循环。

然而,要检查一个字符串是否为回文,则无需创建中间字符串。

您可以按以下方式循环执行。

std::string::size_type i = 0;

for ( auto n = str.length(); i < n / 2 && str[i] == str[n - i - 1]; )
{
    ++i;
}

if ( i == str.length() /2 ) std::cout << str << " is a palindrome\n";

或者没有循环并定义一个你可以写的变量

if ( str == std::string( str.rbegin(), str.rend() ) )
{
    std::cout << str << " is a palindrome\n";
}