Разделение строки, прочитанной из файла /istringstream

В настоящее время я беру онлайн класс C++, и наш текущий проект требует, чтобы мы прочитали файл, взяли каждого ученика и поместили его в вектор.

Моя текущая проблема - разделить прочитанное имя и установить его в правильные переменные.

Псевдокод профессора здесь:

inputFile.open(sFileName.c_str ());
while(inputFile.fail())
{
cout ERROR OPENING FILE
cout PLEASE REENTER THE PASSWORD OF THE FILE
getline(cin >> wd, sFileName);
inputFile.open(sFileName.c_str());
}

inputFile.clear();
inputFile.seek(0, ios::beg);

while(getline(inputFile, sTemp))
{
istringstream inputSStream(sTemp)
inputSStream >> sFirstName >> sMiddleName >> sLastName >> sID >> sClass;
if(sMiddleName != "|")
sFullName = sFirst name + " " + sMiddleName +" " + sLastName;
else
sFullName = sFirstName + " " + sLastName;

Мой текущий код здесь:

        ifstream myFile;
        string firstName, middleName, lastName, fullName, studentID, cID;
        string inFileName, stringTemp;
        cout << "Please enter the name of the file that you want to read in. \n";
        cin >> inFileName;

        myFile.open(inFileName);
        while (myFile.fail())
        {
            cout << "\n""";
            cout << "Error file, Please re-enter file. \n ";
            cin >> inFileName;
            myFile.open(inFileName);
        }
        myFile.clear();
        myFile.seekg(0, ios::beg);

        while (getline(myFile, stringTemp))
        {
            istringstream inputStream(stringTemp);
            inputStream >> firstName >> middleName >> lastName >> studentID >> cID;
            if (middleName != "|")
                fullName = firstName + " " + middleName + " " + lastName;
            else
                fullName = firstName + " " + lastName; 


            //Checking what the input values are
            cout << "First name is " << firstName << endl;
            cout << "Middle name name is " << middleName << endl;
            cout << "Last name is " << lastName << endl;
            cout << "studentID is " << studentID << endl;
            cout << "CID is " << cID << endl;

            Student thisStudent(fullName, studentID, cID);
            studentList.push_back(thisStudent);

        }



        myFile.close();

В настоящее время проблема заключается в том, что строка не разделена правильно, имя получает всю строку, а имя и отчество, идентификатор студента и cID остаются пустыми.

Вот текущий файл, в котором я читаю:

ERIC,ANTHONY,TURNER,1234573,CISC_198
GABRIEL,FEIJO,LOPES,1234574,CISC_199
GEOFFERY,BRYAN,RANSOM,1234575,CISC_200
HANNAH,MAE ,LONGRIE,1234576,CISC_201
HASSAN,ISMAIL,AHMED,1234577,CISC_202
HUNG,B,PHAM,1234578,CISC_203
HUSSEIN,FOUAD,ALJANABI,1234579,CISC_204
JING,XUN,CHEN,1234580,CISC_205
KAJALBEN,CHIMANLAL,MAKWANA,1234581,CISC_206
DANDREA,SHAMAICAH,BUSH,1234570,CISC_195
DANIELLE,MARIE,CORTEZ,1234571,CISC_196
ERDI,T,KIDANE,1234572,CISC_197
AARON,FABIAN,LINGAD,1234567,CISC_192
AARON,T,PATCHIN,1234568,CISC_193
ALI,FOUAD,ALJANABI,1234569,CISC_194
NATHAN,|,NANN,1234585,CISC_210
NEIL,ANDREAS,FRANKA,1234586,CISC_211
OBONE,|,ORIYAVONG,1234587,CISC_212
OLIVIA,JOANNE,MAILANDER,1234588,CISC_213
RALEIGH,|,COSGROVE,1234589,CISC_214
RYAN,PAREDES,PALMARES,1234590,CISC_215
MICHAEL,DUONG,NGUYEN,1234583,CISC_208
MIGLENA,|,CHEMELEKOVA,1234584,CISC_209
STEPHEN,MICHAEL,HOUSE,1234591,CISC_216
MARCUS,D,BUTLER,1234582,CISC_207

Вот вывод, который я не понимаю, как исправить.

First name is ERIC,ANTHONY,TURNER,1234573,CISC_198
Middle name name is
Last name is
studentID is
CID is

1 ответ

Когда вы читаете с operator >> Вы расщепляетесь на пустое пространство. Несмотря на название, getline() можно разделить на другие символы, кроме новой строки:

getline(inputStream, firstName, ',');
getline(inputStream, middleName, ',');
// ...
Другие вопросы по тегам