当我向要读取的csv文件添加空格时,例如将“ ProgrammingInterviews”更改为“ Programming Interviews”,我的程序崩溃并显示以下错误:
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,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