2015-07-07 2 views
0

Как читать целые числа из следующего текстового файла, содержащего символы, цифры и, возможно, алфавиты?Как читать целые числа из текстового файла, содержащего символы, цифры и, возможно, алфавиты?

У меня есть следующий текстовый файл

@ 
100:20 ; 
20:40 ; 
# 

@ 
50:30 ; 
# 

@ 
10:21:37 ; 
51:23 ; 
22:44 ; 
# 

Я попытался следующие коды:

int main() 
{ 
    std::ifstream myfile("10.txt", std::ios_base::in); 

    int a; 
    while (myfile >> a) 
    { 
     std::cout<< a; 
    } 

    return 0; 
} 

и

void main() 
{ 
    std::ifstream myfile("10.txt", std::ios_base::in); 
    std::string line; 

    while (std::getline(infile, line)) 
    { 
     std::istringstream iss(line); 
     int n; 
     while (iss >> n) 
     { 
     std::cout << n ; 
     } 

    } 
} 

Все, что я получаю это значение мусора ИНТ переменной (или начальное значение, если я его инициализирую)

Как это решить?

+0

Что вы пытаетесь достичь? –

+0

Чтобы прочитать целые числа из текстового файла, я написал – parul71625

+0

, попытаюсь прочитать строку, а не int, в вашем примере. Вы узнаете, что вам нужно немного больше настроек, чтобы получить то, что вы хотите – Miki

ответ

2

Вы можете попробовать разделив каждую строку на отдельные лексемы разграниченных по двоеточием:

int main() 
{ 
    std::ifstream myfile("10.txt", std::ios_base::in); 
    std::string line; 

    while (std::getline(myfile, line)) 
    { 
     std::istringstream iss(line); 
     std::string token; 
     while (std::getline(iss, token, ':')) 
     { 
      std::istringstream tss(token); 
      int n; 
      while (tss >> n) 
      { 
       std::cout << n << std::endl; 
      } 
     } 
    } 

    return 0; 
} 

Это должно напечатать :

100 
20 
20 
40 
50 
30 
10 
21 
37 
51 
23 
22 
44 

В соответствии с этим comment я рекомендую более надежный алгоритм синтаксического анализа, который учитывает уникальную структуру ваших файлов.

+0

Откуда вы знаете, какие целые числа принадлежат к какой-либо из пары @ и #? –

+0

Мой ответ не знает, но предположительно автор застрял в этой конкретной части своей проблемы и хотел облегчить эту конкретную проблему. Надеюсь, автор может нажать на более продвинутый алгоритм синтаксического анализа. – huu

0

Попробуйте пропустить плохой характер, один за другим

Что-то вроде:

while (!in.eof()) 
{ 
    int a; 
    in >> a; 
    if (!in) // not an int 
    { 
    in.clear(); // clear error status 
    in.ignore(1); // skip one char at input 
    } 
    else 
    { 
    cout << a; 
    } 
} 
Смежные вопросы