如何从 C++ 文件中读取字符串和相应的 int?
Posted
技术标签:
【中文标题】如何从 C++ 文件中读取字符串和相应的 int?【英文标题】:How to read string and corresponding int from a file in C++? 【发布时间】:2014-06-17 13:54:10 【问题描述】:我正在为一个班级做一个由两部分组成的项目,并且已经完成了第一部分,但在第二部分遇到了麻烦。在第一部分中,我能够从文件中读取列表并放入向量中以使用各种函数进行操作。此部分的列表如下所示:
banana
apple
pineapple
grapefruit
orange
pear
grape
lime
lemon
我能够完成。对于第一部分,我只有一个字符串向量。但是,第二部分介绍了这些值的数量。本节的列表如下:
foo 5
bar 4
baz 2
boz 1
foo 3
此时,我不确定如何将 item 读取为字符串和其后的相应 int。对于重复的项目,它们应该被添加到该项目的原始值中。我正计划拥有一个对象向量,该向量具有名称和要操作的数量,但我需要先读取文件。感谢您的帮助!
这就是我最初阅读文件的方式
if (fileIn.is_open())
//file opened successfully so we are here
ifstream inf(fileName + ".txt");
string word;
while (inf >> word)
currentSet.push_back(word);
【问题讨论】:
项目的字符串有限制吗? (特别是,它们可以包含空格吗?) 您是在读取这些数据时遇到问题,还是在问哪种数据结构比较好? 你如何读取字符串?您是否使用 ifstream 提取运算符 (>>)? 应该foo 5
和 foo 3
导致 8x foo 吗?
@InflictedOwned 在单词后面阅读int
有什么问题。如果单词仅包含小写字母(没有空格),则>>
将适用于阅读该单词,当然,>>
始终适用于阅读int
。
【参考方案1】:
只需执行以下操作:
map<string, int> vals; //or some other data structure
ifstream ifs(somefile);
string word;
int i;
while(ifs >> word >> i)
vals[word] += i;
只需一个接一个地阅读它们。当然,您可以根据需要添加错误检查。但我建议使用地图数据结构,以便于访问和操作。
【讨论】:
这几乎就是我稍后要发布的内容。 +1 我以前从未使用过std::map
,但vals[word]
是否保证被初始化为零,或者您是否还需要显式添加该部分?
对于整数,是的。它将默认初始化该值。以上是关于如何从 C++ 文件中读取字符串和相应的 int?的主要内容,如果未能解决你的问题,请参考以下文章