ошибка (стои: без преобразования) при использовании stringstream для разбора данных? - PullRequest
0 голосов
/ 18 января 2019

Я работаю над проектом, который включает в себя создание ряда классов (ростер, студент, дипломированный тип и т. Д.), Связанных с университетским реестром. У меня есть список данных учеников, которые мне нужно проанализировать, смесь строк и целых чисел. Я использую стои для преобразования моих целых чисел, но продолжаю получать сообщение об ошибке «Завершается с необработанным исключением типа std :: invalid_argument: stoi: нет преобразования». Есть ли что-то действительно очевидное, что я здесь упускаю?

Я попытался переставить и переключился с нескольких других методов на stringstream, но я все еще получаю ту же ошибку.

const string studentData[] =
        {"A1, John, Smith, John1989@gm ail.com, 20, 30, 35, 30, 
SECURITY",
         "A2, Suzan, Erickson, Erikson_1990@gmailcom, 19, 50, 30, 40, 
NETWORK",
         "A3, Jack, Napoli, The_lawyer99yahoo.com, 19, 20, 40, 33, 
SECURITY"
         "A4, Erin, Black, Erin.black@comcast.net, 22, 50, 58, 40, 
SECURITY",
         "A5, Martin, Mart, martin.mart@comcast.net, 22, 30, 32, 35, 
SOFTWARE"};




//add each student to the classRoster

for (int i = 0; i < 5; i++) {

//create stringstream to parse data

stringstream inSS(studentData[i]);

//create an empty vector

vector<string> studentInfo;

//check that stringstream is good and append values from 
    studentData to the studentInfo

while (inSS.good()) {
string segment;
getline(inSS, segment, ',');
studentInfo.push_back(segment);
}

Degree degree;
string studentDegreeProgram = studentInfo.at(8);

if (studentDegreeProgram == "SECURITY") {
        degree = SECURITY;
}
else if (studentDegreeProgram == "NETWORKING") {
        degree = NETWORKING;
}
else {
        degree = SOFTWARE;
}

classRoster->Add(studentInfo.at(0), studentInfo.at(1), 
studentInfo.at(2), studentInfo.at(3), stoi(studentInfo.at(4)), 
stoi(studentInfo.at(5)), stoi(studentInfo.at(6)), 
stoi(studentInfo.at(7)), degree);
}

1 Ответ

0 голосов
/ 18 января 2019

Проблема в том, что вы пытаетесь преобразовать строку, которая не имеет целочисленного значения, при преобразовании ее в тип int. Имеет ли "БЕЗОПАСНОСТЬ" эквивалентное значение типа int, когда вы используете stoi ()? Нет. "5" имеет эквивалентное значение типа int, когда вы используете stoi ()? Да.

...