c ++使用数组的回文程序

时间:2014-03-04 03:48:40

标签: c++ arrays string visual-studio palindrome

我遇到第一个if语句时遇到问题,当程序进入循环时,它跳过if语句。我的程序应该测试输入是否是回文并然后将其打印出来('反向'数组只是在它通过测试时向后打印原始短语)。如果回文是“女士我是亚当”,输出应该是“madamimadam”没有大写或标点符号。我不确定数组是否会处理这个问题,或者我是否需要另一个条件测试来取出这些字符?如果有人可以请查看我的代码并告诉我什么是错的/我能做什么我会非常感激。

#include <iostream>
#include <string>

using namespace std;

int main()
{

    //Variables and Arrays

    char Phrase[80];

    char Reverse[80];

    char* Palindrome = Reverse;

    int i, j, test = 1;

    cout << "Please enter a sentence to be reversed: ";
    cin >> Phrase;

    cin.getline(Phrase, 80);
    int length = strlen(Phrase);

    for(i = 0; i < (length/2); i++) // do a loop from 0 to half the length of the string
    {
        if(test == 1) // test for palindrome
        {
            if(Phrase[i] != Phrase[length-i-1]) // check if the characters match
            {
                test = 0; // if they don't set the indicator to false
            }
        }
        else
        {
            break; // if it is not a palindrome, exit the for loop
        }
    }

    if(test == 1) //test to print out the phrase if it's a palindrome
    {
        cout << "Phrase/Word is a Palindrome." << endl;

        for(j = strlen(Phrase) - 1; j >= 0; Palindrome++, j--)
        {
            *Palindrome = Phrase[j];
            cout << "The reverse is: " << Reverse << endl << endl;
        }
    }
    else
    {
        cout << "Phrase/Word is not a Palindrome." << endl;
    }

    system("Pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

平等 vs 作业

=表示赋值,因此语句test = 1会将test设置为1.由于int to bool转换,如果test非零,则会转换到true。因此,在您的代码中,每个if(test...)都会评估为true

要解决此问题,您应使用==测试相等性。

你的逻辑在第一个循环中是错误的:test初始化为0并且永远不会等于1所以第一个循环是无用的。试试这个

int test = 1;

答案 1 :(得分:2)

您使用赋值而不是使用相等

 if(test = 1) //Logical error. which will always be true
//it should be
if(test == 1)

修改您的代码以便在

下工作

http://ideone.com/GnO6hB