C++中,如何判断一句话是否为回文?我这代码应该怎么改?

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
bool flag = true;
char str[100];
cin >> str;
int len = strlen(str);

for(int i = 0; i < len/2; ++i)
{
if (str[i]!=str[len - i - 1])
{
flag = false;
}

}
if (flag)
cout << "true" << endl;
else
cout << "false" << endl;

}

我编的这个,一个词是可以判断的,比如assa等等
但一旦是句子,也就是说有了空格,就无法正常判断了……请问应该怎么改呢?

你的程序 对空格的判断有问题
将cin>>str; 改成 gets(str);
gets会直接将空格作为字符串的一部分 一直读到回车结束
cin>>到空格就会停止读入
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-14
cin遇到空格或者回车输入结束了啊,所以你只能得到一个个单词啊,无法得到句子cin.getline(str,100)这位兄弟这样是可以的,当然用gets函数也可以的啊。
第2个回答  2011-12-14
先把字符串按空格切分,放入一个字符串数组里
然后for循环比较头尾的字符串是否相同,做法和你现在的类似。
第3个回答  2011-12-14
问题主要出在for(int i = 0; i < len/2; ++i)这句话,len/2为中间值。
如果空格可不记录回文中,例如:a ssa,你的代码就无法判断了。
其次你的代码只能判断长度为偶数的字串。

你的代码只能判断ASCII码,没有办法判断中文。

建议使用指针去解决此问题。
第4个回答  2011-12-14
加一个循环 遇到空格继续往下走
第5个回答  2011-12-14
把你代码中的cin>>str; 改成 gets(str);
相似回答