不包括特殊字符和空格的回文
Palindrome excluding special characters and spaces
我写了一个代码来检查一个字符串是否是回文,它应该排除空格和特殊字符,并且应该不区分大小写。所以函数 isPalindrome(string A) 接受一个字符串,returns 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"
时,它会失败并出现 运行 时间错误。
所以请让我知道我哪里错了?
问题是两个迭代器可能已经到达嵌套 while 循环的末尾,应该对此进行检查。
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(rit != A.rend() && !isalnum(*rit)) //if char from the end is not alphanumeric, then increment the reverse iterator till we find the alphanumeric char.
++rit;
while(it != A.end() && !isalnum(*it)) //if char from the start is not alphanumeric, then increment the iterator till we find the alphanumeric char.
++it;
if (it == A.end() || rit == A.rend())
break;
if(tolower(*it)!=tolower(*rit)) //case in-sensitive comparison
return 0;
++it;
++rit;
}
return 1;
}
我写了一个代码来检查一个字符串是否是回文,它应该排除空格和特殊字符,并且应该不区分大小写。所以函数 isPalindrome(string A) 接受一个字符串,returns 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"
时,它会失败并出现 运行 时间错误。
所以请让我知道我哪里错了?
问题是两个迭代器可能已经到达嵌套 while 循环的末尾,应该对此进行检查。
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(rit != A.rend() && !isalnum(*rit)) //if char from the end is not alphanumeric, then increment the reverse iterator till we find the alphanumeric char.
++rit;
while(it != A.end() && !isalnum(*it)) //if char from the start is not alphanumeric, then increment the iterator till we find the alphanumeric char.
++it;
if (it == A.end() || rit == A.rend())
break;
if(tolower(*it)!=tolower(*rit)) //case in-sensitive comparison
return 0;
++it;
++rit;
}
return 1;
}