回文不包括特殊字符和空格

时间:2017-06-13 13:47:04

标签: c++ string palindrome

我已经编写了一个代码,用于检查字符串是否是回文,哪些字符串应该排除空格和特殊字符,并且应该是不区分大小写的。所以函数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"时,它会因运行时错误而失败。

所以,请告诉我哪里出错了?

1 个答案:

答案 0 :(得分:0)

问题是两个迭代器都可能在嵌套的while循环中到达末尾,应该检查这个。

{{1}}