2013-09-26 3 views
0

Эй я пытаюсь прочитать в следующих строках с использованием GetLineC++ GetLine() delimitter

(15,0,1, #)

(2,11,2) ,.

(3,20,0, S)

Я хочу, чтобы иметь возможность просто извлекать целые числа как ints и символы как char, но я понятия не имею, как их извлекать.

+0

Прочитать 'char int char int char int char char', проверить, удалось ли это, проверьте содержимое. – jrok

ответ

-1

Сравните значение, которое вы получаете от шестнадцатеричного значения getline(), и выполните некоторые операторы if для сравнения с ASCII. Это скажет вам, хватаете ли вы число, письмо или символ.

3

Кажется, вы могли прочитать разделители, то есть '(', ')' и ',', а затем просто использовать форматированный вход. Использование простого шаблона для манипулятора должно хорошо сделать:

#include <iostream> 
#include <sstream> 

template <char C> 
std::istream& read_char(std::istream& in) 
{ 
    if ((in >> std::ws).peek() == C) { 
     in.ignore(); 
    } 
    else { 
     in.setstate(std::ios_base::failbit); 
    } 
    return in; 
} 

auto const open_paren = &read_char<'('>; 
auto const close_paren = &read_char<')'>; 
auto const comma  = &read_char<','>; 

int main() 
{ 
    int x, y, z; 
    char c; 
    std::istringstream in("(1, 2, 3, x)\n(4, 5, 6, .)"); 
    if (in >> open_paren >> x 
      >> comma >> y 
      >> comma >> z 
      >> comma >> c 
      >> close_paren) { 
     std::cout << "x=" << x << " y=" << y << " z=" << z << " c=" << c << '\n'; 
    } 
}