多个测试用例的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”测试用例的数量,然后找到字符串的答案,那么代码只给出第一个测试用例的答案。

【问题讨论】:

如果您需要获取每个单词,为什么还要使用getlinegetline 获取每一行。 cin &gt;&gt; 得到每一个字。 与您的问题无关,但请花一些时间阅读Why should I not #include <bits/stdc++.h>?和Why is “using namespace std;” considered bad practice? 如果您确实需要逐行收集输入,您可以将该行放在std::istringstream 中并用&gt;&gt; 解析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问题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个文件中设置mocha测试用例的执行顺序

多个测试用例文件执行

unittest 10 测试套件( 有选择执行测试方法,测试类,自定义测试用例的顺序 TestSuite)

如何使用 testng.xml 实现多个测试用例的连续执行

测试用例的编写

测试用例的编写