Обычное решение, которое я использую, состоит в том, чтобы прочитать входные данные в виде строки (используя std::getline
вместо >>
) и проанализировать его, как я бы это делал на любом языке - boost::regex
здесь очень полезно;если вы уверены, что можете рассчитывать на C ++ 11, то это std::regex
(что, я думаю, почти идентично Boost).Таким образом, вы получите что-то вроде:
std::string line;
if ( ! std::getline( std::cin, line ) ) {
// Error reading line (maybe EOF).
} else {
if ( regex_match( line, firstFormat) ) {
processFirstFormat( line );
} else if ( regex_match( line, secondFormat) ) {
processSecondFormat( line ) ;
} ...
}