所以我试图从标准输入中读取这样的输入(使用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
库,因此我猜测错误与使用getline
从cin
读取到stringstream
有关?这里的任何帮助将不胜感激。
答案 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()