C++ getline中存在多个测试用例的问题

C++ getline中存在多个测试用例的问题,c++,string,getline,C++,String,Getline,我想打印字符串中每个单词的第一个字母。我使用了getline函数来获取带有空格的字符串。它适用于单个测试用例,但不适用于多个测试用例。请帮助解释为什么会发生这种情况,如果可能的话,提出一个解决方案来获得多个测试用例的答案 #include<bits/stdc++.h> using namespace std; string firstLetterWord(string str) { string result = ""; if(str[0]!='

我想打印字符串中每个单词的第一个字母。我使用了getline函数来获取带有空格的字符串。它适用于单个测试用例,但不适用于多个测试用例。请帮助解释为什么会发生这种情况,如果可能的话,提出一个解决方案来获得多个测试用例的答案

#include<bits/stdc++.h> 
using namespace std; 

string firstLetterWord(string str) { 
      string result = "";  
      if(str[0]!=' ')result.push_back(str[0]); 
    for (int i=1; i<str.length(); i++) {  
        if (str[i] != ' ' && str[i-1] == ' ') { 
            result.push_back(str[i]);    
        } 
    } 
    return result; 
} 
int main() { 
   string str;
   getline(cin,str);
   cout << firstLetterWord(str); 
   return 0; 
} 
#包括
使用名称空间std;
字符串firstLetterWord(字符串str){
字符串结果=”;
如果(str[0]!=''结果。向后推(str[0]);

对于(inti=1;i,正如@NathanOliver所评论的,阅读每一行,同时阅读每一个单词,这正是您所需要的(如果您不确信,请在中阅读更多)

入门的最简单示例:

#include <iostream>
#include <string>

int main(void)
{
  std::string word;
  while(std::cin >> word) {
    std::cout << word[0] << "\n";
  }

  return 0;
} 

注:正如@SomeProgrammerDude提到的:

如果需要从输入中读取多行,并分别处理它们,那么可以使用一个,如下所示:

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

int main(void)
{
  int lines_no;
  cin >> lines_no;
  // To ignore the trailing newline
  std::cin.ignore();

  while(lines_no--)
  {
    string line;
    // Read a line from the input
    getline(cin, line);

    // Construct a string stream based on the current line
    stringstream ss(line);

    string word;
    // For every word of the sstream,
    while(ss >> word)
      // print its first character
      cout << word[0];
    cout << endl;
  }
  return 0;
}
输出:

MNIA
HHAY

PS:如前所述,我不得不忽略尾随的换行符。

如果需要获取每一个单词,为什么要使用
getline
getline
获取每一行。
cin>
获取每一个单词。这与您的问题无关,但请花一些时间阅读,如果确实需要逐行收集输入,您可以放置li使用
>
解析
istringstream
,得到单词。我需要在下一行中得到输出,假设有两个测试用例,字符串是我的名字是ANKIT,您好,所以输出必须是MNIA,然后是一个新行,然后是HHAY。@Ann,然后您需要getline,我描述了它。@B注:下次在你的问题中加入输入和预期输出当然@gsamaras。您的方法工作正常,但我需要先为不同字符串的数量输入整数,您的代码工作正常,但它先打印一个空行。如何删除?我知道这是一个愚蠢的问题,但我无法解决。帮助将是appreciated@Ann这个数字代表什么?行数要阅读?还是每行的单词?至于空行,我无法复制。不客气,我很乐意提供帮助!:)数字代表行数,我必须打印每行单词的第一个字母,然后打印一行新行,然后再打印下一行。@Ann我现在明白了,谢谢,检查我的更新答案,是吗如果你愿意的话。谢谢。很好用。
MY NAME IS ANKIT 
HELLO HOW ARE YOU
MNIA
HHAY