gpt4 book ai didi

c++ - 无法通过循环运行我的代码但是手动复制和粘贴工作

转载 作者:行者123 更新时间:2023-11-28 02:56:14 25 4
gpt4 key购买 nike

这段代码有效。我也可以在我的 main 中从头到尾复制粘贴几次,它仍然有效。

int main()
{
string str;

cout << "Input a palindrome: "; // Start
getline(cin, str);

if (testPalindrome(str) == 1)
cout << "Your input is a palindrome: True" << endl;
else
cout << "Your input is a palindrome: False" << endl;

cout << endl; // End


cout << "\nCreated by,\nNorman Ettedgui" << endl;
system("pause");
return 0;
}

但是这段代码不起作用,我得到的错误是我的函数中的字符串越界(奇怪的是在函数调用之前)。

这是我的 testPalindrome 函数:

bool testPalindrome(string str)
{
string newStr;

for (int i = 1; i < str.length() - 1; i++)
newStr += str[i];

if (newStr.length() > 1)
testPalindrome(newStr);

if (str[0] == str[str.length() - 1])
return true;
}

这就是我要运行的:

int main()
{
string str;

int i = 0;

while (i != -1)
{
cout << "Input a palindrome: ";
getline(cin, str);

if (testPalindrome(str) == 1)
cout << "Your input is a palindrome: True" << endl;
else
cout << "Your input is a palindrome: False" << endl;

cout << "-1 to Exit or any other number to continue: ";
cin >> i;

cout << endl;
}

cout << "\nCreated by,\nNorman Ettedgui" << endl;
system("pause");
return 0;
}

最佳答案

试试下面的函数

bool testPalindrome( string s)
{
return ( s.size() < 2 ? true
: s.front() == s.back() && testPalindrome( s.substr( 1, s.size() -2 ) ) );
}

也主要替换这条语句

if (testPalindrome(str) == 1)

对于

if ( testPalindrome(str) )

如果你同时使用 getline 和 operator >> 那么你应该使用 ignore 来跳过 ENTER 键(不要忘记包含 <limits> )

#include <limits>
while (i != -1)
{
cout << "Input a palindrome: ";

cin.ignore( numeric_limits<streamsize>::max() );
getline(cin, str);

//...
cin >> i;

cout << endl;
}

我会解释为什么会出现错误。没有调用忽略函数 getline 的语句读取一个空字符串。所以 str 是空的。在函数 testPalindrome 中有语句

for (int i = 1; i < str.length() - 1; i++)

对于空字符串其长度等于0则表达式

str.length() - 1

具有无符号类型的最大值,因为此表达式的类型是某种无符号整数类型,并且 -1 的内部表示对应于最大无符号值。因此变量 i 将始终小于 -1 并且您会遇到内存访问冲突。

另外,我会使用另一个循环而不使用额外的变量 i。

while ( true )
{
cout << "Input a palindrome: ";

string str;
getline(cin, str);

if ( str.empty() ) break;

//...
}

关于c++ - 无法通过循环运行我的代码但是手动复制和粘贴工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com