目标:检查用户输入的字符串以确定它是否是回文

时间:2014-05-03 03:09:41

标签: c++

大家好我是c ​​++初学者我正在研究程序来检查用户输入的字符串以确定它是否是回文。我有大部分代码,但仍有两个问题,第一个是函数'bool PalindromeTest()',第二个错误是:错误:'strrev'未在此范围内声明

#include <iostream>
#include <cstring>
using namespace std;

char s[100];
char sr[100];

void InputString();
bool PalindromeTest();
void PrintMessage();

int main()
{
       InputString();
       return 0;
}

void InputString(int n=0)
{
       cout<<"Input the string you wish to be tested";
       cin.getline(s, 100);
       if(strlen(s)>n)
          PalindromeTest();
}

bool PalindromeTest()
{
       bool rvalue = true;
       strcpy(sr, s);
       strrev(sr);
       if(strcmp(s, sr) == 0)
       {
              rvalue=true;
              PrintMessage();
       }
       else
       {
          rvalue=false;
          PrintMessage();
    }
void PrintMessage(bool rvalue)
{
       if(true == rvalue)
         cout<<"The entered string IS a palindrome"<<endl;
       else
         cout<<"The entered strins IS NOT a palindrome"<<endl;
}

4 个答案:

答案 0 :(得分:0)

由于这是一个C ++问题,真正的C ++解决方案怎么样? strstd::string

bool isPalindrome = std::equal(str.begin(), str.end(), str.rbegin());

答案 1 :(得分:0)

我不认为strrev()是C ++函数。

识别回文的快速方法是使用带有两个计数器的循环,例如ij

i=0j=strlen(str)-1(最后一个有效字符)开始,然后重复++i--jwhile i<j

如果在任何迭代中,str [i]!= str [i],那么它不是回文,所以你可以返回false。 如果它到达循环的末尾而没有发现任何差异,那么它就是一个回文。

bool Palindrome(const char *str)
{
    int len = strlen(str);
    int i, j;
    for (i=0, j=len-1; i<j; ++i, --j)
        if (str[i] != str[j])
            return false;
    return true;
}

答案 2 :(得分:0)

我修复了你的代码:

#include <iostream>
#include <cstring>
#include <cstdio> 
    #include <cstdlib>

using namespace std;

char s[100];
char sr[100];

void InputString();
bool PalindromeTest();
void PrintMessage(bool);

int main()
{
    InputString();

    std::cin.get() ;    
    std::cin.get() ;
    return 0;
}

void InputString()
{
    int n = 0;
    cout<<"Input the string you wish to be tested \n";
    cin.getline(s, 100);
    if(strlen(s)>n)
        PalindromeTest();
}

bool PalindromeTest()
{
    bool rvalue = true;
    strcpy(sr, s);
    strrev(sr);
    if(strcmp(s, sr) == 0)
    {
        rvalue=true;
        PrintMessage(rvalue);
    }
    else
    {
        rvalue=false;
        PrintMessage(rvalue);
    }
    return false ; // ??
}
void PrintMessage(bool rvalue)
{
    if(true == rvalue)
        cout<<"The entered string IS a palindrome"<<endl;
    else
        cout<<"The entered strins IS NOT a palindrome"<<endl;
}
  1. 前向声明中的方法签名(名称,参数数量及其类型)必须与其定义中的签名等效。(请查看InputString,PrintMessage的默认和固定版本的声明和定义)。

  2. n未定义。

  3. 类型不是void的方法必须返回一个值,但在你的情况下,PalindromeTest不需要返回任何内容。

  4. 这是一个更好的版本:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    
    using namespace std;
    
    char s[100];
    char sr[100];
    
    void InputString();
    bool PalindromeTest();
    void PrintMessage(bool);
    
    int main()
    {
        InputString();
    
        std::cin.get() ;    
        std::cin.get() ;
        return 0;
    }
    
    void InputString()
    {
        cout<<"Input the string you wish to be tested \n";
        cin.getline(s, 100);
        PrintMessage(PalindromeTest());
    }
    
    bool PalindromeTest()
    {
        strcpy(sr, s);
        strrev(sr);
        if(strcmp(s, sr) == 0)
        {
            return true ;
        }
        else
        {
            return false ;
        }
    }
    void PrintMessage(bool rvalue)
    {
        if(rvalue)
            cout<<"The entered string IS a palindrome"<<endl;
        else
            cout<<"The entered strins IS NOT a palindrome"<<endl;
    }
    

答案 3 :(得分:0)

调用PrintMessage()时,需要将rvalue作为参数传递。 想想,这会有所帮助。