我遇到第一个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;
}
答案 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)
修改您的代码以便在
下工作