我已经编写了一个代码,用于检查字符串是否是回文,哪些字符串应该排除空格和特殊字符,并且应该是不区分大小写的。所以函数isPalindrome(字符串A)接受一个字符串,如果它是一个回文,则返回1,如果不是,则返回0。
例如:输入:男人,计划,运河:巴拿马 输出:1 以下是代码 -
int isPalindrome(string A) {
string::iterator it;
string::reverse_iterator rit;
it=A.begin();
rit=A.rbegin();
while(it!=A.end() && rit!=A.rend()){
while(!isalnum(*rit)) //if char from the end is not alphanumeric, then increment the reverse iterator till we find the alphanumeric char.
++rit;
while(!isalnum(*it)) //if char from the start is not alphanumeric, then increment the iterator till we find the alphanumeric char.
++it;
if(tolower(*it)!=tolower(*rit)) //case in-sensitive comparison
return 0;
++it;
++rit;
}
return 1;
}
适用于A man, a plan, a canal: Panama"
或"A man, a plan, a canal: Panama
等输入的所有变体,但是当我输入"A man, a plan, a canal: Panama"
时,它会因运行时错误而失败。
所以,请告诉我哪里出错了?
答案 0 :(得分:0)
问题是两个迭代器都可能在嵌套的while循环中到达末尾,应该检查这个。
{{1}}