我想打印字符串中每个单词的第一个字母。我已经使用getline函数获取带空格的字符串。它适用于单个测试用例,但不适用于多个测试用例。请帮助解决此问题的原因,并在可能的情况下提出解决方案,以解决多个测试案例的问题。
main
如果我输入't'测试用例的数量,然后找到字符串的答案,那么代码仅给出第一个测试用例的答案。
答案 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>?