首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

判断回文错哪了

2013-09-11 
判断回文哪里错了#include iostream#include stdio.h#include cstringusing namespace std/*2013-9

判断回文哪里错了

#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

/*
2013-9-5
编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现。


两种情况,字符为奇数,最后剩下中间字符;
字符为偶数,最后没有字符

如:"aba","abba"

*/
bool is_PalindromicStr(string::iterator * p_start, string::iterator* p_end)
{
    if (p_start == p_end)
        return true;
    else if (p_end == (p_start + 1))
        return true;
    else if (*p_start == *p_end)
        is_PalindromicStr(p_start + 1, p_end - 1);
    else
        return false;
}
int main()
{
    string str = "abba";

    cout << is_PalindromicStr(str.begin(), str.end()-1) << endl;

    return 0;
}

这一行报错 cout << is_PalindromicStr(str.begin(), str.end()-1) << endl;
哪里错了啊 
[解决办法]
迭代器没有重载“-”操作符吧,你又何必-1呢,正常的做法就是传begin()和end(),函数里也处理一下没有问题呀。
还有函数参数的类型是string::iterator *,而你传入的类型是string::iterator,多看看编译器的错误提示吧。
[解决办法]
对象用作参数的时候,一般多用引用而不是指针
还有递归函数中逻辑有错误,我改了一下,注意比对不同之处
#include <iostream>
#include <stdio.h>
#include <cstring>

using namespace std;

/*
2013-9-5
编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现。


两种情况,字符为奇数,最后剩下中间字符;
字符为偶数,最后没有字符

如:"aba","abba"

*/
bool is_PalindromicStr(string::iterator& p_start, string::iterator& p_end) //改动
{
    if (p_start == p_end)
        return true;
    else if (p_end == (p_start - 1))  //改动


        return true;
    else if (*p_start == *p_end)
        return is_PalindromicStr(p_start + 1, p_end - 1); //改动
    else
        return false;
}
int main()
{
    string str = "abba";

    cout << is_PalindromicStr(str.begin(), str.end()-1) << endl;

    return 0;
}


[解决办法]
迭代器不建议此处用,指针好
[解决办法]
bool is_PalindromicStr(string::iterator p_start, string::iterator p_end)
{
bool ret = false;
//printf("%c %c\n",*p_start, *p_end);
//printf( "%d %d\n",&(*(p_start + 1)), &(*(p_end - 1)) );
if (*p_start == *p_end)
{
ret = true;
if(p_start + 1 <= p_end - 1 )
{
if ( false == is_PalindromicStr(p_start + 1, p_end - 1) )
ret = false;
else
ret = true;
}
}
else
{
//printf("in else\n");
ret = false;
}
return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
//Object* p = Object::CreateObject("A");
//delete p;

string str = "abdggdba";
cout << is_PalindromicStr(str.begin(), (str.end()-1)) << endl;

system("pause");
return 0;
}

vs2010编译通过。

热点排行