多个测试用例的getline问题[关闭]
Posted
技术标签:
【中文标题】多个测试用例的getline问题[关闭]【英文标题】:Problem in getline with multiple test cases [closed] 【发布时间】:2019-08-08 18:11:27 【问题描述】:我想打印字符串中每个单词的首字母。我使用 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;
如果我输入“t”测试用例的数量,然后找到字符串的答案,那么代码只给出第一个测试用例的答案。
【问题讨论】:
如果您需要获取每个单词,为什么还要使用getline
? getline
获取每一行。 cin >>
得到每一个字。
与您的问题无关,但请花一些时间阅读Why should I not #include <bits/stdc++.h>?和Why is “using namespace std;” considered bad practice?
如果您确实需要逐行收集输入,您可以将该行放在std::istringstream
中并用>>
解析istringstream
以获取单词。 See option 2 of this answer for an example.
【参考方案1】:
如果您需要从输入中读取多行并单独处理它们,那么您可以使用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 所述,我不得不忽略尾随的换行符。
【讨论】:
您的方法工作正常,但我需要先输入整数输入不同字符串的数量,您的代码工作正常,但它首先打印一个空行。如何删除?我知道这是一个愚蠢的问题,但我无法弄清楚。帮助将不胜感激 @Ann 这个数字代表什么?要读取的行数?还是每一行的文字?至于空行,我无法重现它,run my code online。不客气,很高兴为您提供帮助! :) number 表示行数,我必须打印每个单词的第一个字母为一行,然后是一个新行,并为下一行执行相同的操作。 @Ann 我现在明白了,谢谢,检查我更新的答案,这有效吗? :) Run it online,如果你愿意的话。 谢谢。它工作正常。【参考方案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>?
【讨论】:
假设有 2 个测试用例并且字符串是 MY NAME IS ANKIT 和 HELLO HOW ARE YOU 所以输出必须是 MNIA,然后是新行,然后是 HHAY,我需要在下一行获取输出. @Ann 那么你需要getline,我在我的不同答案here 中对此进行了描述。 PS:下次在您的问题中包含输入和预期输出。 :) 确定@gsamaras。以上是关于多个测试用例的getline问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章