这只是我的C ++类的基本回文测试程序,似乎存在问题。
我已经知道我在这里有两个独立的缺陷。我强烈怀疑,至少有一个是逻辑问题。第一个问题是它在第一次运行时运行良好,但是当循环启动时,它不会要求用户输入放入一个新行来测试作为回文,它只是重新测试旧的。第二个问题是,我认为它是在测试空间,我根据这个事实,即它让'hannah'恢复良好,但'从来没有甚至或奇怪'都回来了。这个我只是不知道如何解决。
#include <iostream>
#include <string>
using namespace std;
int main()
{
bool repeater = true;
do
{
string palindroneCheck;
bool palindronity = true;
cout << "Please enter a line to test for palindromity.\n";
getline(cin, palindroneCheck);
int stringSize = palindroneCheck.size();
int cutOff = stringSize/2;
for (int palindroneLength = 0; palindroneLength < cutOff; palindroneLength++)
{
if (palindroneCheck[palindroneLength] != palindroneCheck[stringSize - palindroneLength -1])
{palindronity = false;
break;}
}
if(palindronity == true)
cout << "Congratulations! This line is a palindrone!\n\n";
else
cout << "Sorry, but this is not a palindrone.\n\n";
palindroneCheck.clear();
char repeat;
cout << "Would you like to try another line? Y/N\n";
cin >> repeat;
if (repeat == "n" || repeat == "N")
repeater = false;
} while (repeater == true);
}
答案 0 :(得分:1)
好的,你对这个空间是正确的。您的代码将要求空格与其他角色一样位于同一位置。
另一个错误似乎更微妙:它是你要求重复的地方。
为什么呢?因为它要求你输入'n'然后'输入'
cin >> repeat
只读取'n',而不是'enter'
所以下次你做`readline(cin,PalindromCheck)时,它会读取一个空字符串。
在阅读之后尝试写palindromCheck
。你会看到。
答案 1 :(得分:0)
getline的阅读问题通过评论解决。对于空白,您可以通过删除字符串palindroneCheck
,
std::string::iterator new_end = std::remove(palindroneCheck.begin(), palindroneCheck.end(), ' ');
std::string palindroneCheckWithoutSpaces(palindroneCheck.begin(), new_end);
然后使用palindroneCheckWithoutSpaces
进行Palindrone测试。
int stringSize = palindroneCheckWithoutSpaces.size();
int cutOff = stringSize/2;
for (int palindroneLength = 0; palindroneLength < cutOff; palindroneLength++)
{
if (palindroneCheckWithoutSpaces[palindroneLength] != palindroneCheck[stringSize - palindroneLength -1])
{palindronity = false;
break;}
}
if(palindronity == true)
cout << "Congratulations! This line is a palindrone!\n\n";
else
cout << "Sorry, but this is not a palindrone.\n\n";
(您需要标题algorithm
才能使用remove
)
更新
std::remove
根据您传入的值从输入范围中删除一个元素(这由start和end定义),这里是空格' '
。然后它返回更改范围的新结束(因为您删除了某些内容,范围变小)。新范围以begin开头,以返回值结束。
所以第二行你根据新范围创建一个新字符串。