我熟悉c ++,但不知道如何比较相同或不同字符串的索引字符。这是一个回文示例,它接受一个int并通过字符串流将其转换为字符串。
bool ispalindrome(int a) {
stringstream stream;
stream<<a;
string str = stream.str();
int length = str.length();
int offset = length - 1;
for (int i=0; i<=offset; i++ && offset--) {
if (str[i] == str[i + offset]) {
return false;
}
offset--;
}
return true;
}
由于某种原因,这总是被评估为假。我不认为null终止会与它有任何关系,因为它没有长度报告,所以我想我必须使用错误的比较方法。我似乎无法找到类似strncmp但有单个字符的东西。
[编辑:固定标题]
答案 0 :(得分:5)
我不知道你是怎么写那个循环的,但我很确定它应该是
for (int i=0; i<=offset; i++, offset--) {
if (str[i] != str[offset]) {
return false;
}
}
答案 1 :(得分:1)
可能是使用逗号,
for (int i=0; i<=offset; i++ ,offset--)
更常见吗?
否则,
if (str[i] == str[i + offset]) {
使用'!='代替'=='会更好
但是,通过一个简单的示例,我没有看到“总是错误的”行为
int main() {
for ( int i = 0; i < 1000; ++i )
cout << i << " = " << ispalindrome(i) << endl;
}
答案 2 :(得分:1)
你可以使用迭代器:
std::string::iterator start = str.begin();
std::string::reverse_iterator end = str.rbegin();
int halfWay = str.length() / 2;
for (int i = 0; i <= halfWay; i++, start++, end++)
{
if (*start != *end)
return false;
}
return true;
免责声明:未经测试,但我也不擅长C ++!
答案 3 :(得分:0)
您的检查条件应为:
if (str[i] != str[i + offset]) {
^--here
答案 4 :(得分:0)
如果只是检查回文,你也可以使用STL的reverse
#include <algorithm>
#include <string>
bool isPalinDrome = false;
std::string mystr = "cnc";
std::string mystrcpy = mystr;
std::reverse(mystrcpy.begin(),mystrcpy.end());
if(mystr == mystrcpy)
isPalindrome = true;
但如果你只是比较个别角色,那么上面的答案已经告诉你如何去做。 所以重申一下,你只需要在字符串的中途遍历