C++ 按相反顺序打印字符串输入
我正试图建立一个程序,它以相反的顺序输出输入,直到输入“停止”一词。 例如,如果我输入C++ 按相反顺序打印字符串输入,c++,string,getline,output,C++,String,Getline,Output,我正试图建立一个程序,它以相反的顺序输出输入,直到输入“停止”一词。 例如,如果我输入 dog cat monkey desk chair burger cheese ham stop 它应该输出: burger cheese ham desk chair dog cat monkey 到目前为止,我有以下几点: { string x, y; do { cin >> x; y = y + x; } while (x != "stop"); int rev
dog cat monkey
desk chair
burger cheese ham
stop
它应该输出:
burger cheese ham
desk chair
dog cat monkey
到目前为止,我有以下几点:
{
string x, y;
do {
cin >> x;
y = y + x;
} while (x != "stop");
int reverse = y.getNumLines();
while (reverse >= 0) {
cout << y.getLine(reverse) << "\n";
reverse = reverse -1;
}
return 0;
}
{
字符串x,y;
做{
cin>>x;
y=y+x;
}而(x!=“停止”);
int reverse=y.getNumLines();
而(反向>=0){
cout为什么不交换您追加的订单
#include <iostream>
int main(int argc, const char * argv[])
{
std::string x, y;
while ( (std::getline(std::cin,x)) && x != "stop"){
y = x + "\n" + y; // "" + "foo bar" 2.) "second input" + "foo bar"
}
std::cout<< y;
return 0;
}
#包括
int main(int argc,const char*argv[]
{
std::字符串x,y;
while((std::getline(std::cin,x))&&x!=“停止”){
y=x+“\n”+y;/”+“foo-bar”2.“第二次输入”+“foo-bar”
}
std::cout为什么不交换您追加的订单
#include <iostream>
int main(int argc, const char * argv[])
{
std::string x, y;
while ( (std::getline(std::cin,x)) && x != "stop"){
y = x + "\n" + y; // "" + "foo bar" 2.) "second input" + "foo bar"
}
std::cout<< y;
return 0;
}
#包括
int main(int argc,const char*argv[]
{
std::字符串x,y;
while((std::getline(std::cin,x))&&x!=“停止”){
y=x+“\n”+y;/”+“foo-bar”2.“第二次输入”+“foo-bar”
}
std::coutNico的答案可能是一条更好的途径,但对于那些喜欢更惯用方法的人,我推荐一个行向量,你可以在存储后轻松地向后打印。首先是一个Line
类,你可以用它习惯性地读取输入行,而不是停在空格处:
struct Line {
std::string str;
};
std::istream &operator>>(std::istream &in, Line &line) {
std::getline(in, line.str);
if (line.str == "stop") {
in.clear(std::ios::failbit);
}
return in;
}
std::ostream &operator<<(std::ostream &out, const Line &line) {
out << line.str;
return out;
}
我们要做的第一件事是通过读取输入(使用我们对行
的输入支持)形成一个向量。当到达文件末尾或输入“stop”时,它将停止,并且每一行输入都将很好地存储在向量中
接下来,我们调用reverse\u copy
将向量中的所有内容(输入的每一行)复制到标准输出,用换行符分隔,但都是反向进行的,因此我们以每一行的相反顺序结束
就是这样!一旦创建了Line
类,获取行输入并反转它们的算法可以保持不变,就像我们使用单词一样,但是切换到行只需要将std::string
的几个实例替换为Line尼科的答案可能对您来说是一条更好的途径,但是f对于那些喜欢更惯用的方法的人,我推荐一种行向量,存储后可以轻松向后打印。首先是一个Line
类,您可以使用它惯用地读取输入行,而不是停在空格处:
struct Line {
std::string str;
};
std::istream &operator>>(std::istream &in, Line &line) {
std::getline(in, line.str);
if (line.str == "stop") {
in.clear(std::ios::failbit);
}
return in;
}
std::ostream &operator<<(std::ostream &out, const Line &line) {
out << line.str;
return out;
}
我们要做的第一件事是通过读取输入(使用我们对行
的输入支持)形成一个向量。当到达文件末尾或输入“stop”时,它将停止,并且每一行输入都将很好地存储在向量中
接下来,我们调用reverse\u copy
将向量中的所有内容(输入的每一行)复制到标准输出,用换行符分隔,但都是反向进行的,因此我们以每一行的相反顺序结束
就是这样!一旦行
类被创建,获取行输入并反转它们的算法可以保持不变,就像我们使用单词一样,但是切换到行只需要将std::string
的几个实例替换为行
,y
成为向量不是更简单吗
?您确实意识到这两个函数不存在于字符串中,对吗?对不起,我还没有关于向量的知识..它必须是“停止”吗?文件结尾往往能更好地处理所有内容。如果你把要求放在它上面,请记住这一点。y
成为vector
,不是更简单吗?你确实意识到这两个函数对于字符串来说并不存在,对吗?对不起,我还没有关于vector的知识。它必须是“stop”吗?文件结尾往往能更好地处理所有内容。如果您将要求放在文件结尾上,请记住这一点。这将输出“stop”。一个简单的解决方法是while((std::cin>>x)&&x!=“stop”)
。另一个问题是它需要在新行上打印,这需要以最简单的形式,std::getline
。除了修复他的代码之外,他还指出了添加中的逻辑错误:pWell,还有y.getline
部分。唯一的问题是它不存在。@user1940749,这就是getline代码>部分是这样的。它读取一行输入并将其存储到x
。多亏了你们,我让它按我希望的方式运行。我有一个问题,当Karthik说函数getline不适用于字符串时,这次它是如何工作的?还是我太笨了……这将输出“停止”。一个简单的解决方法是而((标准:cin>>x)和&x!=“停止”)
。另一个问题是它需要在新行上打印,这需要以最简单的形式,std::getline
。除了修复他的代码之外,他还指出了添加中的逻辑错误:pWell,还有y.getline
部分。唯一的问题是它不存在。@user1940749,这就是getline代码>部分可以。它读取一行输入并将其存储到x
。多亏了你们,我让它按我希望的方式运行。我有一个问题,当Karthik说函数getline不适用于字符串时,这次它是如何工作的?还是我太笨了。用户表示他不知道vector。这暗示用户的cla学生还没有学会如何上课。@Nico,我意识到了这一点。这就是为什么我在开始的时候有一张便条推荐你对OP的答案。这张便条对未来的访问者来说意义更大,他们对课程和算法有更多的了解,并希望完成这一任务。用户表示他不知道vector。这暗示着用户的课程还没有人教你如何上课。@Nico,我意识到了。这就是为什么我在开始时有一张便条推荐你对OP的答案。这张便条对未来的访问者来说意义更大,他们对课程和算法有更多的了解,并且希望完成这项任务。