gpt4 book ai didi

c++ - 在 C++ 中使用 string::erase 提取数据

转载 作者:太空狗 更新时间:2023-10-29 21:35:29 25 4
gpt4 key购买 nike

我正在研究 csv 上的数据读写。

所以我想到了这个问题。

我使用 getline(myfile, myline); 从 csv 中获取一行,然后将 myline 发送到一个函数,以提取所有无用信息并保留某些特定 ', '(逗号)我需要。

我用这个函数实现了这个:

int get_id(string myline) {
int id;
size_t pos;
pos = myline.find(",");
myline.erase((myline.begin() + pos), myline.end());
stringstream converter(myline);
converter >> id;
return id;
}

我只有一个 myline.find(","); 因为我想要的数据是该行的第一行。

我的 csv 格式示例:

id,name,age,address

所以我在 myline.erase() 处遇到了一个错误,我想是因为当我把它放在评论中时它运行得很顺利。我想知道我将 size_t 添加到 myline.begin() 是否正确? (没有编译错误)。作为提取数据的心态也是正确的吗?

错误如下:

terminate called after throwing an instance of 'std::length_error' what(): basic_string::_S_create

最佳答案

示例,使用提供的数据不会导致错误。但是,如果输入不包含逗号,则会出现问题,例如您尝试标记最后一个元素时会遇到的问题。 std::string::find返回 npos如果找不到匹配项。 npos 的值是 std::size_t 的最大值(如果您使用的是默认分配器)。将此值添加到 begin 会给您一个无效的迭代器。

在删除之前简单地与npos比较就可以避免这个问题。

if (pos != string::npos) {
myline.erase((myline.begin() + pos), myline.end());
}

关于c++ - 在 C++ 中使用 string::erase 提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com