对于模糊的标题,我们深表歉意。很难描述。我试图从用户那里得到一个短语,并将该短语放入一个矢量,逐字逐句,用空格分隔。出于某种原因,当矢量被打印时,如果有意义的话,它会完全省略短语的第一个单词。这是我到目前为止的代码:
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);
}
答案 0 :(得分:2)
这里你只输了两次输入,只跳过第一次输入 现在你应该改变这个
else{ string temp;
getline(cin, temp);
phraseInput+=temp;
istringstream iss(phraseInput);
//.....
答案 1 :(得分:1)
我想我找到了你的答案
我用短语“this is line。”测试了你的代码。
你的变量“phraseInput”首先取“this”字符串。
在getline(cin,phraseInput)之后。
您的变量“phraseInput”采用“is line”字符串。
因此,当它打印时,它只是跳过第一个关键字。
结果是:第一个字符串“this”缺失
我想这样:你从用户那里得到两个输入。
因此我想“如果我先评论一下cin会怎么样?”
评论你的第一个cin后。我在变量“phraseInput”
中得到了所有字符串结果是:
然后我认为“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);
}