2012-05-17 3 views
0
1 = 0 0 97 218 
2 = 588 0 97 218 
3 = 196 438 97 218 
4 = 0 657 97 218 
5 = 294 438 97 218 

У меня есть txt-файл, как указано выше. Как я могу читать только целые числа из этого файла без =?Как читать целые числа из txt-файла, пропуская =?

+0

То немного низких технологий :( –

+0

@NominSim я создаю петлю с ifstream, но когда он прочитал = возникает проблема, но я не могу понять – droidmachine

+0

@droidmachine:.. Покажите код – ildjarn

ответ

0

Вот базовая структура: читайте строки за строкой и разбор.

for (std::string line; std::getline(std::cin, line);) 
{ 
    std::istringstream iss(line); 
    int n; 
    char c; 

    if (!(iss >> n >> c) || c != '=') 
    { 
     // parsing error, skipping line 
     continue; 
    } 

    for (int i; iss >> i;) 
    { 
     std::cout << n << " = " << i << std::endl; // or whatever; 
    } 
} 

Чтобы прочитать файл через std::cin, конвейер в вашу программу, как ./myprog < thefile.txt.

+0

Он не приложил никаких усилий. Может также переименовать сайт для writemycodeforme.com –

1

Другая возможность будет фаска, которая классифицирует = как белое пространство:

class my_ctype : public std::ctype<char> 
{ 
    mask my_table[table_size]; 
public: 
    my_ctype(size_t refs = 0) 
     : std::ctype<char>(&my_table[0], false, refs) 
    { 
     std::copy_n(classic_table(), table_size, my_table); 
     my_table['='] = (mask)space; 
    } 
}; 

Затем пропитать ваш поток с локали, включая эту фаской, а затем читать цифры, как если = там не было вообще:

int main() { 
    std::istringstream input(
      "1 = 0 0 97 218\n" 
      "2 = 588 0 97 218\n" 
      "3 = 196 438 97 218\n" 
      "4 = 0 657 97 218\n" 
      "5 = 294 438 97 218\n" 
     ); 

    std::locale x(std::locale::classic(), new my_ctype); 
    input.imbue(x); 

    std::vector<int> numbers((std::istream_iterator<int>(input)), 
     std::istream_iterator<int>()); 

    std::cout << "the numbers add up to: " 
       << std::accumulate(numbers.begin(), numbers.end(), 0) 
       << "\n"; 
    return 0; 
} 

Конечно, это, вероятно, не очень разумно сложить все числа, так как первый один на каждой линии, кажется, номер строки - это просто быстрый де mo, чтобы показать, что мы действительно читаем цифры без лишних «вещей», вызывающих какие-либо проблемы.

+0

+1 Это легко лучшее решение когда-либо :-) –

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