2015-06-06 2 views
2

Итак, я хочу взять информацию из файла, она начнется с имен (строк) и в конечном итоге изменится на целые числа.Используйте fstream и sstream вместе для разделения строк/целых чисел из файла

Ex. для nums.txt

James Smith 
John Jones 
Amy Li 
1 3 2 3 
3 2 4 1 0 

Я хочу, чтобы написать программу, которая хранит каждое имя (одно имя в каждой строке), а затем, когда имена конца и номера начинаются, он начинает добавлять каждый # вхождение в массив. I.E. если 3 2-х появляются, я хочу

numInt[2] to equal 3 

Я хочу сделать это с помощью ifstream принимать данные из файла и использовать stringstream для сортировки строк и целых чисел. до сих пор у меня есть это

int main() { 
string names[10]; 
int numNames = 0; 
int numInt[100] = {}; 
ifstream file("nums.txt"); 
stringstream ss; 
string s; 
int n; 

while (file >> ss) { 
    while (ss >> s) { 
    names[numNames] = s; 
    numNames++; 
    } 
    while (ss >> n) { 
    numInt[n]++; 
    } 
} 
return 0; 
} 

Я знаю, что я буду об этом неправильно, но я не знаю, как правильно это сделать.

ответ

2

Я думаю, что я хотел бы сделать что-то вроде этого:

while (file >> ss) { 
    if (isalpha((unsigned char)ss[0]) 
     names.push_back(ss); 
    else { 
     std::istringstream buf(ss); 
     int n; 

     while (buf >> n) 
      numbers.push_back(n); 
    } 
} 

Это подтверждает то, что вы просили, но не строго следить за соблюдением его. IOW, если у вас что-то вроде:

Joe Blow 
1 2 3 
Jerry Coffin 

... было бы поставить "Джо Blow" и "Джерри Гроб" в names и 1, 2 и 3 в numbers.

Смежные вопросы