89 int Student::loadStudents() {
90 Student newStudent;
91 string comma;
92 string line;
93 ifstream myfile("student.dat");
94 string name,email="";
95 string status="";
96 int id;
97 if (myfile.is_open()){
98 while ( getline (myfile,line) ) {
99 //parse line
100 string myText(line);
101 istringstream iss(myText);
102 if(!(iss>>id)) id=0;
103
104 std::ignore(1,',');
105 std::getline(iss,name,',');
106 std::getline(iss,status,',');
107 std::getline(iss,email,',');
108 cout<<name<<endl;
109 Student newStudent(id,name,status,email);
110 Student::studentList.insert(std::pair<int,Student>(id,newStudent));
以上是我定义的方法。执行 cout 时,输出为:
无名氏
马特·史密斯
在我添加第二个getline(iss,name,',')之前,cout什么也没做。
有人能解释为什么它可以重复使用这行代码,为什么相同的代码不能用于状态和电子邮件吗?
文件中的示例行:
1、约翰·多伊,大一新生,jd@email.com
编辑:
我在第一个 getline(iss,name,',') 之前使用了 std::ignore(1,','),并收到错误 'ignore' 在此命名空间 'std' 中未声明。
有人能解释为什么它可以重复使用这行代码,为什么相同的代码不能用于状态和电子邮件吗?
因为在< code>isa上的第一个操作是< code>iss
假设您的输入文件的格式是< code>id,name,status,email。第一个操作读到但不包括第一个逗号。第一个逗号仍然在输入流中。这意味着您的第一个< code>std::getline(iss,name,',')将读取第一个逗号和第一个逗号之前剩余的所有内容。第一个逗号之前的所有内容,那是一个空字符串。
最好不要混合解析概念。沿着逗号拆分该行,然后解析每个拆分的元素。
编辑
处理此问题的另一种方法:调用 std::ignore
,而不是第一次调用 std::getline
。要读取的下一个字符应该是逗号,因此请忽略它。如果您可以假设输入文件格式正确,这是可以的。如果您必须处理人类创建的输入文件的变幻莫测,这是不行的。
另一个问题:假设某人的名字是“John Doe, PhD”或电子邮件地址是“John Doe, PhD”?
< br >编辑2
只是为了澄清一下,假设该行包含“1234,John Doe,新生,jdoe@college_name.edu”。
iss之前的输入指针
iss 之后的输入指针
前):< br> 第一次调用< code>std::getline
后的输入指针(第二次调用< code>std::getline1234,John Doe,新生,jdoe @ college _ name . edu
< br > _____^
第二个< code>std::getline(iss,name,',')读到第二个逗号。它将< code>name设置为“John Doe”空字符串,并将输入指针移至第二个逗号之后。
第二次调用 std::getline
后输入指针(在第三次调用 std::getline
之前):1234,John Doe,新生,jdoe@college_name.edu
____________^
存在问题 来自用户输入,一个文件或一个网站的HTML字符串,你可能需要对它进行解析并取其内容,或校验其格式是否完整,或想修改它。怎么办?jsonu能够帮你轻松解决这些问题 解决方法 使用静态Jsoup.parse(String html) 方法或Jsoup.parse(String html, String baseUri)示例代码: String html = "<html><head><tit
问题内容: 我要解析的字符串: 周日2013年11月10日10:00:00 我的代码: 编译器错误输出: java.text.ParseException:无法解析的日期:java.text.DateFormat.parse(Unknown Source)的“ Sun Nov 10 10:00:00 CET 2013” … 问题答案: 可能您缺少正确的语言环境。在您的示例中尝试以下操作:
我在下面有一个java程序: 现在,我想将两个字符串值“加纳”或“加纳”分配给“National”变量,这样当用户输入“加纳”或“加纳”时,当程序将“nation”值检查为“National”值,然后执行“if”块中的语句时,条件变为真。 但是有了我上面的代码,程序只有在用户输入“加纳”时才会执行“如果”语句;程序在用户输入“加纳”时才会执行“其他”语句。 请帮帮我。 谢谢你。
我想做一个java程序,将读取一个文本文件,并存储每一个单一的字符出现。因此,它将解释标点符号,字母,数字,大写,小写等。给定一个文本文件,如: 打印值将如下所示: R:1 r:3
问题内容: 例如,给定字符串“ 2009/11/12”,我想获取正则表达式(“ \ d {2} / d {2} / d {4}”),因此可以匹配“ 2001 /也是01/02”。 有什么可以做的吗?相似的东西?有任何想法吗? 问题答案: 有text2re,这是一个基于Web的免费“正则表达式示例”生成器。 我认为这在源代码中不可用。我敢说没有自动的正则表达式生成器,无需用户干预即可正确运行,因为这
问题内容: 这是我第一次使用YAML文件,因此我首先想到的是找到任何可以帮助我解析文件的库。 我发现了两个库YamlBean和SnakeYAML。我不确定我要使用哪一个。 这是我要解析的文件的示例: 该文件将动态更改,因此我不知道该文件将包含多少个用户或组。 我想从中获取的信息是用户名和类似的组: 并且仅从组中选择组名,如下所示: 有人可以让我从这里开始吗?最佳的库是什么?YamlBean或Sna