使getline()读取右侧行
Make getline() read the right line
我有3个使用getline的函数。第一个函数根据行的第一个字符检查要调用两个函数中的哪一个。
iMessage* getMessage(std::ifstream& ifs, char n) {
iMessage* msg;
std::string line;
std::getline(ifs, line, n);
if (line[0] == 'T') {
msg = new Twitter(ifs, n);
}
else if (line[0] == 'e') {
msg = new eMail(ifs, n);
}
else msg = nullptr;
return msg;
}
在twitter/电子邮件构造函数中:
eMail::eMail(std::ifstream& ifs, char n) {
std::string a;
std::getline(ifs, a, n);
//do stuff
}
Twitter::Twitter(std::ifstream& ifs, char n) {
std::string a;
std::getline(ifs, a, n);
//do stuff
}
问题是构造函数总是读取文件的第一行。如何使构造函数读取与getMessage()函数相同的行?
getMessage
不需要读取整行即可完成其工作。它可以只看第一个字符。
事实上,有一个函数可以查看第一个字符而不将其从流中删除:peek()
。
所以整个事情就像一样简单
iMessage* getMessage(std::ifstream& ifs, char n)
{
switch (ifs.peek())
{
case 'T': return new Twitter(ifs, n);
case 'e': return new eMail(ifs, n);
default: return nullptr;
}
}
但是返回类型应该是CCD_ 3。std::unique_ptr
对防止内存泄漏非常有帮助。
在getMessage
中,您可以在读取以下行后恢复文件位置:
std::streampos pos = ifs.tellg();
std::getline(ifs, line, n);
ifs.seekg(pos);
相关文章:
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 当 getline 直到新行才读取时会发生什么?
- Getline在读取文本文件时有一种奇怪的行为
- 使用getline读取.csv文件时出现问题
- 如何在不循环的情况下使用getline读取文件
- 使用std::getline()读取一行
- C++ : 如何在使用 getline() 和 ifstream 对象从文件中读取一行时跳过第一个空格?
- 无法使用 getline() 输入字符串.它只读取一个字符串
- 从 txt 文件中读取数据的 Getline
- 如何使此函数使用 getline 读取字符串并使用 int 执行相同的行为?
- std::getline 读取最后一个字符串两次
- 使用 c++ 中的 getline 函数连续读取两行
- 使用 getline 读取字符串,但每行中都有换行符
- 为什么我的getline不正确读取.csv文件
- C 使用getline()内部循环以在CSV文件中读取
- 使用 getline 从输入文件读取一行到输出文件
- 使用 getline 从文件中读取多行
- 使用 getline 和 FILE 而不是 ifstream 的 c++ 读取文件