检查给定字符串是否为回文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";
}
#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";
}