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的答案。这张便条对未来的访问者来说意义更大,他们对课程和算法有更多的了解,并且希望完成这项任务。