带有多个测试用例的getline中的问题

时间:2019-08-08 18:11:27

标签: c++ string getline

我想打印字符串中每个单词的第一个字母。我已经使用getline函数获取带空格的字符串。它适用于单个测试用例,但不适用于多个测试用例。请帮助解决此问题的原因,并在可能的情况下提出解决方案,以解决多个测试案例的问题。

main

如果我输入't'测试用例的数量,然后找到字符串的答案,那么代码仅给出第一个测试用例的答案。

2 个答案:

答案 0 :(得分:3)

如果您需要从输入中读取多行并将其单独处理,则可以使用std::stringstream,如下所示:

#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;
}

输入:

MY NAME IS ANKIT 
HELLO HOW ARE YOU

输出:

MNIA
HHAY

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

答案 1 :(得分:2)

正如@NathanOliver所说,getline()读取每一行,而std::cin读取每个单词,而这正是您所需要的(如果您不确定,请在std::cin.getline( ) vs. std::cin中阅读更多内容)。

入门的最小示例:

#include <iostream>
#include <string>

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

  return 0;
} 

输出(用于输入:羚羊鸟猫狗):

A
b
c
d

PS:如@SomeProgrammerDude所述:Why should I not #include <bits/stdc++.h>?