当我尝试将其放入向量中时,会删除短语的第一个单词吗?

时间:2015-11-10 07:55:47

标签: c++ string vector

对于模糊的标题,我们深表歉意。很难描述。我试图从用户那里得到一个短语,并将该短语放入一个矢量,逐字逐句,用空格分隔。出于某种原因,当矢量被打印时,如果有意义的话,它会完全省略短语的第一个单词。这是我到目前为止的代码:

 void printVector(vector<string>& words){

  cout << "Print words: " << endl;
    for (int i = 0; i < words.size(); i++){
      if (i < words.size()){
        cout << words[i] << ", ";
      }
      else
        cout << words[i];
      }
 cout << endl;
}


int main(){

  string phraseInput;
  string stop = "done";
   do{
     cin >> phraseInput;

      if(phraseInput == stop){
        cout << "Program finished." << endl;
        return 0;
      }
      else {
        getline(cin, phraseInput);

        istringstream iss(phraseInput);

        vector<string> words;
        copy(istream_iterator<string>(iss),
             istream_iterator<string>(),
             back_inserter(words));

         printVector(words);
     }

  }while(phraseInput != stop); 
}

2 个答案:

答案 0 :(得分:2)

这里你只输了两次输入,只跳过第一次输入 现在你应该改变这个

     else{ string temp;

            getline(cin, temp);
            phraseInput+=temp;
            istringstream iss(phraseInput);
//.....

答案 1 :(得分:1)

我想我找到了你的答案

我用短语“this is line。”测试了你的代码。

你的变量“phraseInput”首先取“this”字符串。

enter image description here

在getline(cin,phraseInput)之后。

您的变量“phraseInput”采用“is line”字符串。

enter image description here

因此,当它打印时,它只是跳过第一个关键字。

结果是:第一个字符串“this”缺失

enter image description here

我想这样:你从用户那里得到两个输入。

因此我想“如果我先评论一下cin会怎么样?”

enter image description here

评论你的第一个cin后。我在变量“phraseInput”

中得到了所有字符串

enter image description here

结果是:

enter image description here

然后我认为“do while”循环也是不必要的,因为它会打印出来自用户的任何单词。

我还评论了你的“do while”循环

以下是您的代码的最终版本。

#include <vector>
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

void printVector(vector<string>& words){

    cout << "Print words: " << endl;
    for (int i = 0; i < words.size(); i++){
        if (i < words.size()){
            cout << words[i] << ", ";
        }
        else
            cout << words[i];
    }
       cout << endl;
}


int main(){

    string phraseInput;
    string stop = "done";
    /*do{
        cin >> phraseInput;

        if (phraseInput == stop){
            cout << "Program finished." << endl;
            return 0;
        }
        else {*/
            getline(cin, phraseInput);

            istringstream iss(phraseInput);

            vector<string> words;
            copy(istream_iterator<string>(iss),
                 istream_iterator<string>(),
                 back_inserter(words));

            printVector(words);
      //}

            system("pause");
      //} while (phraseInput != stop);
}