如何从 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 5foo 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?的主要内容,如果未能解决你的问题,请参考以下文章

C++中如何从路径字符串中获取文件名!

在 C++ 中,如何使用多个线程读取一个文件?

C++文件读取中,怎样从文件中读取一种类型的数据

从文本文件 C++ 中读取(fname、lname、class、seat number),存储和验证

c语言中从文件中按行读取字符串,并进行相应操作。

C++ 如何从string字符串中一行行读取数据