2014-10-18 3 views
0

У меня есть программа, которая должна принимать входные данные из текстового файла с несколькими строками. Каждая строка - это информация для учащегося, и эта информация также разделяется запятыми.C++ разделение запятой/getline

То, что я до сих пор

stringstream ss; 
    string data = ""; 
    string student[50] = ""; 
    int i = 0; 
    ifstream inFile; 
    inFile.open("file.txt"); 
     while(getline(inFile, student[i])) 
     { 

      cout << student[i] << endl; 
      i++; 
     } 

принимает каждую строку и присваивает его в массив студентов. Теперь у каждого ученика есть свое место.

Так что я должен разбить линию на каждый компонент (имя, dob, gpa, адрес и т. Д.), Что будет сделано в классе Student.

У меня есть эта переменная студент будет строка из одной строки

stringstream ss(student); 
    while(getline(ss, data, ',')){ 
     cout << data << endl; 
    } 

Выводит все данные по отдельности из файла.

Вопрос: Как изменить переменную stringstream в нижнем коде (цель не выводить, я сделал это для тестирования, чтобы увидеть, что происходит), мне нужно делать данные массив, а затем назначить элементы этого массива в переменные?

Есть ли тема, относящаяся к разделителю? Я посмотрел или не понял?

Благодаря

+0

bUmp. Если кто-то может помочь, я был бы признателен. Я не буду на следующий час или около того, но я вернусь к любому, кто может помочь. Еще раз спасибо – user3562657

+0

Как выглядит ваш класс «Студент»? Если 'getline (ss, data, ',')' правильно раскроет ваш вход, вы можете просто использовать 'getline (ss, studentVar.name ',')' и остальные переменные 'Student' в цикле. – IllusiveBrian

+0

Если вы хотите переназначить 'std :: stringstream', вы можете сделать:' ss.clear(); ss.str («новые строковые данные»); '. – Galik

ответ

0

Если вы хотите переназначить зЬй :: stringstream вы можете сделать:

ss.clear(); 
ss.str("new string data"); 

Я бы поставил это первое, что в вашем время() петли. Таким образом, вам не нужен массив для хранения всех строк. Вы можете обрабатывать каждую строку в записи студента по мере их чтения.

int main() 
{ 
    stringstream ss; 
    string data; // no need to initialize 
    string student; // no need for array 

    ifstream inFile; 
    inFile.open("data.txt"); 

    while(getline(inFile, student)) 
    { 
     cout << student << endl; 

     ss.clear(); // clear any errors (from last loop) 
     ss.str(student); // put student data in ss 

     while(getline(ss, data, ',')) 
     { 
      cout << data << endl; 
     } 
    } 
} 
+0

Я думаю, для чего мне нужно, чтобы их было легче держать отдельно. Я буду держать то, что вы сказали, но на данный момент я использую '' Student * S; S = новый студент [50]; '' , а затем применить мой исходный код, чтобы отправить его непосредственно классу вместо массива – user3562657

+0

@ user3562657 Зачем использовать new для массива постоянного размера? –

+0

Я не знаю другого способа сделать это. Студент в этом коде относится к классу Student – user3562657