正在从.txt中读取
Reading in from .txt
我有一个.txt文件,文件名和等级如"emiltytaco 56"。在姓氏之后,有3个空行不应该插入到我的trie和堆中。但是,当遇到空行时,代码会被中止并转储。这是插入功能
while(myfile.good())
{
getline(myfile, line);
name = line.substr(0,line.find("t"));
stringstream convert((line.substr(line.find("t")+1)));
convert >> grade;
if(name.at(0) > 96 && name.at(0) < 123)
{
insert(name, grade);
cout << name << " " << grade << endl;
}
}
myfile.close();
close是否应该是带有if的"else"语句的一部分?我的一个朋友有这样的东西,但他的并没有放弃。
第一点,将循环更改为类似的内容
while (getline(myfile, line)) {
// ...
}
其次,将整行输入字符串流,并从中读取这两部分可能要简单得多:
stringstream convert(line);
std::getline(convert, name, 't');
convert >> grade;
第三,如果你想检查小写字母,使用islower
比使用96和123等幻数要好得多。不过我不会那样检查的。如果你想检查一个空行,最好直接检查,在你阅读后立即使用line.empty()
while (getline(myfile, line))
if (!line.empty()) {
std::istringstream convert(line);
std::getline(convert(line, name);
convert >> grade;
insert(name, grade);
std::cout << name << " " << grade << "n";
}
除此之外还有一步:由于名称和等级(显然)是相关的,我可能会为它们定义一个类,并编写一个提取器来从流中获取该类型的对象:
class whatever {
std::string name;
int grade;
friend std::istream &operator>>(std::istream &is, whatever &w) {
std::getline(is, w.name, 't');
is >> w.grade;
is.ignore(4096, 'n');
return is;
}
};
有了它,我们可以更简单地从文件中读取数据:
whatever w;
while (myfile >> w) {
insert(w);
std::cout << w.name << " " << w.grade << "n";
}
请注意,在这种情况下,我们根本不必显式检查空行——我们只需要检查是否可以成功地从流中读取和转换whatever
,这将在空行中失败。
相关文章:
- 一种在C++中读取TXT配置文件的简单方法
- 如何读取 TXT 文件并仅将 int 存储在 C 中
- 如何在C++中读取.txt文件
- 尝试读取.txt文件并根据用户输入的字母拉出特定行
- 读取.txt文件C++
- 如何在 c++ 中使用 fstream 读取.txt文件
- 如何用 c++ 读取 txt 文件,如果我们不知道其中有多少个数据字符串,以及每行有多长?
- 要读取txt文件并从第二列中找到其最小值的第一列值
- C 如何通过特定n字符读取TXT文件的值
- C :按行读取txt文件的读数,单词用单词读取,每行的单词不均匀
- 读取.txt文件并将每行放入向量
- 动态分配读取 txt 文件的内存
- 读取.txt文件并组织成二维数组
- 如何从现有目录中读取TXT文件
- 尝试创建一个读取.txt文件,显示它,计数唯一单词的程序,并在使用了多少次的情况下显示独特的单词.C
- 读取.txt文件中的多行并输出每行的答案
- 在生成器 6 中使用 ifstream 读取 txt 文件C++
- 内核模式:如何逐行读取 txt 文件
- c++读取txt文件并复制到两个类istream::peek()中
- C :使用ARGV [1]到一个函数中读取.txt文件的错误