从cin读取getline到stringstream(C ++)

时间:2016-03-13 18:58:12

标签: c++ cin getline stringstream ostream

所以我试图从标准输入中读取这样的输入(使用cin):

  

Adam English 85
      查理数学76
      埃里卡历史82
      理查德科学90

我的目标是最终将每个数据块存储在我自己创建的数据结构中,因此基本上我想解析输入,因此每个数据都是个体的。由于每行输入由用户一次输入一次,因此每次我得到需要解析的整行输入。目前我正在尝试这样的事情:

stringstream ss;
getline(cin, ss);

string name;
string course;
string grade;
ss >> name >> course >> grade;

我遇到的错误是XCode告诉我,getline没有匹配的函数调用让我感到困惑。我已添加string库,因此我猜测错误与使用getlinecin读取到stringstream有关?这里的任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:9)

你差不多了,错误很可能是 1 ,因为你试图用第二个参数getline来调用stringstream,只需稍加修改并存储首先在std::cin string内的数据,然后用它来初始化stringstream,您可以从中提取输入:

// read input
string input;
getline(cin, input);

// initialize string stream
stringstream ss(input);

// extract input
string name;
string course;
string grade;

ss >> name >> course >> grade;

1。假设你已经包括:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

答案 1 :(得分:7)

你不能std::getline()一个std::stringstream;只有一个std::string。作为字符串读取,然后使用字符串流来解析它。

struct Student
{
  string   name;
  string   course;
  unsigned grade;
};

vector <Student> students;
string s;
while (getline( cin, s ))
{
  istringstream ss(s);
  Student student;
  if (ss >> student.name >> student.course >> student.grade)
    students.emplace_back( student );
}

希望这有帮助。

答案 2 :(得分:2)

您可以使用>>,因为button1.Click += button1_Click; 无论如何都会读取空格。

答案 3 :(得分:0)

您的代码中没有using namespace std,或者您没有完全限定使用std::前缀在std名称空间中对API进行的调用,例如{{1} }。下面的解决方案解析CSV而不是标记化其中包含空格的值。标量提取,解析CSV以及将等级从字符串转换为int的逻辑都是分开的。 regex_token_iterator用法可能是最复杂的部分,但它在很大程度上使用了非常简单的正则表达式。

std::getline()