gpt4 book ai didi

c++ - 反向字符串错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:42 25 4
gpt4 key购买 nike

我正在创建这个反向字符串应用程序,但如果我在字符串中包含空格,我会收到错误消息!

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

int main()
{
int inputa;
cout<<"%%%%%%%%%%%%%%%%%%String Reversing App%%%%%%%%%%%%%%%%%%%%%%%%"<<endl<<endl;

cout<<"\nEnter 1 to continue and 0 to exit"<<endl<<endl;
cin>>inputa;
if(inputa!=0)
{

do
{

string a,c="";

cout<<"\nEnter the string you want to Reverse : ";
cin>>a;
for(int x=a.length()-1; x>=0; x--)
{
c=c+a.substr(x,1);
}

cout<<"\nThe Reverse String is : "<<c<<endl;

cout<<"\nEnter 1 to continue and 0 to exit"<<endl<<endl;
cin>>inputa;



}
while(inputa!=0);
}
//not my home work
}

如果我键入以下字符串,如“abc def”,我会得到一个错误。但除此之外它完美无缺!代码有什么错误吗!我是 CPP 的新手,所以如果你能帮助我,我会很有帮助!

最佳答案

operator>> 将在第一个空格处停止读取(正如 David 指出的那样)——改用 getline

std::string a;
getline(std::cin, a);

完整编辑您的代码

#include <iostream>
#include <string>
#include <limits>

int main()
{
std::cout << "%%%%%%%%%%%%%%%%%%String Reversing App%%%%%%%%%%%%%%%%%%%%%%%%\n\n";

std::cout << "\nEnter 1 to continue and 0 to exit" << std::endl;
int inputa;
std::cin >> inputa;
if(std::cin && inputa!=0)
{
std::cin.ignore(std::numeric_limits<int>::max( ), '\n');
do
{
std::string a,c;

std::cout<<"\nEnter the string you want to Reverse : ";
getline(std::cin, a);
for(int x=a.length()-1; x>=0; --x)
{
c+=a[x];
}

std::cout<<"\nThe Reverse String is : " << c << std::endl;

std::cout << "\nEnter 1 to continue and 0 to exit" << std::endl << std::endl;
std::cin >> inputa;
std::cin.ignore(std::numeric_limits<int>::max( ), '\n');
}
while(std::cin && inputa!=0);
}
}

包括 David 的逐字回答,因为他回答得更详细(David Rodríguez - dribeas)- 在他删除之前请+1。他的回答增加了我没有提到的更多信息,因此我们应 David 的要求将其合并为一个回复,

Adrian 的回答是正确的,解决了眼前的问题并提供了解决方案。至于为什么会进入死循环,原因是在读取第一个单词后,你正在尝试读取一个整数std::cin >> inputa,这将失败为cde 不能解析为整数。此时流进入失败状态,后续读取将失败而不做任何事情(直到您清除错误状态)。

你应该怎么做?

如果你想处理整行,那么你应该使用std::getline,而不是operator>>。当心混合两者,因为 operator>> 不会占用读取后的空格(包括新行),您可能只是读取下一个 std::getline 的空行。您可以始终使用 std::getline 读取然后解析该行,或者使用 ignore 清除换行符。最后,无论何时执行 IO 操作,都不要期望操作会成功:检查流的状态。如果您不这样做,并且您的循环依赖于 IO 来完成,则很容易进入这种无限循环,其中流被标记为失败,以后没有读取成功并且您永远不会跳出循环。

关于c++ - 反向字符串错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188756/

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