2016-01-23 2 views
0

Я столкнулся с проблемой, в которой мне нужно загрузить данные из текстового файла, а затем сохранить его в массив из string. Мой подход состоит в том, чтобы рассматривать массив как 2D-массив, но тип char.Входной массив строк по одному символу за раз

Это мой код:

string *rollno; 
rollno=new string[2]; 
string line; 

ifstream in("file.txt",ios::app); 

int i=0; 
char single; 
in.get(single); 

while (single != '.') { 
    for (int j=0; single!=',' || single!='.'; j++) { 
     rollno[i][j]=single;\\saving in array character wise 
    } 

    in.get(single);\\getting the next line 
    i++; 
} 

cout<<rollno[0]<<endl<<rollno[1];\\checking 

Может кто-нибудь помочь мне понять, что я делаю неправильно?

+0

На ваш вопрос? –

+0

Что является содержимым файла? Что делать, если вы увеличиваете 'i' за пределами' 1' (что является верхним индексом 'rollno')? Или что, если вы используете любое индексирование в *** пустую строку ***? –

+0

@RSahu Мне нужно создать систему управления в школе, для которой я должен ввести файл. –

ответ

0

Хмм ... Не совсем уверен, что вы пытаетесь сделать, но из-за внешнего вида, разве это не то, что вы ищете?

(Предполагается, что i является индексом массива и j для std::string.operator[] как представляется, дело.)

// ... 

while (single != '.') { 
    while (single != ',' && single != '.') { 
     rollno[i] += single; // appending to string. 
    } 

    in.get(single); //getting the next line 
    i++; 
} 

Вы можете добавить в char к std::string с operator+=, как описано here.

Кроме того, исправьте меня, если я ошибаюсь, но (single != ',' || single != '.') всегда будет оценивать true; если single == ',', то single != '.', и наоборот. Если вы хотите, чтобы он прекратил обработку после того, как он встречает какой-либо разделитель, вы используете логический И, чтобы убедиться, что он остановится, если проверка не выполняется.

(Извинения за любые типографские ошибки или ошибки, которые я, возможно, пропустил.)