无法使用substr和find正确解析带有空格的字符串
Cant parse string with whitespace correctly using substr and find
当我向正在读取的csv文件添加空白时,例如,将"ProgrammingInterviews"更改为"ProgrammingExperts",我的程序将崩溃,并出现以下错误:
terminate called after throwing an instance of 'std::invalid_argument'
what(): stoi
Aborted (core dumped)
stoi()
正在抱怨,因为它正被馈送一个字符串。在填充后直接打印出字符串数组的每个元素,这表明函数忽略了分隔符并停止读取空白字符,然后用相同的字符串填充字符串数组的各个元素。
据我所知,这不是substr()
或find()
的预期行为。
fstream finb ("books.csv", ios::in);
// Buffer
char arr[100];
string s;
string delimiter = ",";
while(fins>>arr){
s=arr;
int i;
string data[3];
for(i=0; i<3; i++){
data[i] = s.substr(0, s.find(delimiter));
cout << "data[" << i << "]: " << data[i] << endl;
s.erase(0, s.find(delimiter) + delimiter.length());
}
students.push_back({stoi(data[0]), data[1], data[2], stoi(s)});
}
带有空格的csv示例(不起作用(:
111941847,Programming Interviews,NoahSuojanenKindler,0
没有空白的csv示例(工作(:
111941847,ProgrammingInterviews,NoahSuojanenKindler,0
csv中带空格的字符串数组示例:
data[0]: 111941847
data[1]: Programming
data[2]: Programming
s: Programming
csv中没有空格的字符串数组示例:
data[0]: 111941847
data[1]: ProgrammingInterviews
data[2]: NoahSuojanenKindler
s: 0
使用getline()
而不是operator>>
进行修复。
for (string line; getline(finb, line);) {
int isbn = stoi(line.substr(0, line.find(delimiter)));
line.erase(0, line.find(delimiter) + delimiter.length());
string bookName = line.substr(0, line.find(delimiter));
line.erase(0, line.find(delimiter) + delimiter.length());
string bookAuthor = line.substr(0, line.find(delimiter));
line.erase(0, line.find(delimiter) + delimiter.length());
int borrowed = stoi(line);
books.push_back({isbn, bookName, bookAuthor, borrowed});
i++;
}
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 移除前面有空格的前2个字符串
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 在 c++ 中逐行阅读字符串,不要以空格停止
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 如何存储包含多个空格的字符串 c++
- 在特定位置为字符串添加空格
- 有没有办法在 c++ 中获取带有空格的完整字符串?
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- 从没有空格的字符串中提取整数
- 用于拆分空格字符串的程序不起作用
- 解析C++中的完整(从头到尾)字符串,包括所有空格
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何获取我的区域设置的空格字符串?