Мой код работает как надо, но я нахожусь в поисках более элегантное решениеУплотнить этот фрагмент кода C++
В этом для петли, я разбора строки текста из файла с членами данных разделенный запятой. Это было сохранено в vector<str>str
файл в тексте:
bob,1,2,3
sally,5,8,6
joe,5,1,9
Мне нужно хранить отдельно имя и 3 соответствующие значения в соответствующие отсеки в vector<student> s
.
Любой способ конденсировать это?
for (string currLine : str)
{
int pos = 0;
int next = 0;
next = currLine.find (',', pos);
string name (currLine.substr (pos, next));
pos = next + 1;
next = currLine.find (',', pos);
string expr (currLine.substr (pos, next));
int a = atoi (expr.c_str());
pos = next + 1;
next = currLine.find (',', pos);
expr = (currLine.substr (pos, next));
int b = atoi (expr.c_str());
pos = next + 1;
next = currLine.find (',', pos);
expr = (currLine.substr (pos, next));
int c = atoi (expr.c_str());
student s (name, a, b, c); //create student with extracted name and scores
vec.push_back (s); //now push this student onto the vector
}//end for()
Попробуйте использовать струнный поток. –
Это просто альтернатива atoi(), правильно? Если theres больше для stringstream, чем я знаю – SSOPLIF
Возможный дубликат [Как читать и анализировать CSV-файлы на C++?] (Http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse- csv-files-in-c) – Barmar