Попытка токенизировать строку

Возможный дубликат:
Как я могу токенизировать строку в C ++?

У меня есть этот текстовый файл

q1 t q2

q2 e q3

q3 x q4

q4 t q5 q6 q11

q5 | q6 q11

Я хочу извлечь каждый элемент, который разделен пробелом. Например, в первой строке я хочу иметь возможность извлекать «q1», «t» и «q2» как отдельные токены.

Я думаю, что есть два способа сделать это

  1. читать из файла, токен за токеном, используя ifstream >>. Проблема, с которой я сталкиваюсь при таком подходе, состоит в том, что я не знаю, как определить, когда был достигнут конец строки, чтобы я мог перейти к следующей строке.

  2. Другой подход — получить всю строку сразу с помощью getline (); Проблема с этим подходом заключается в том, что я должен сам маркировать строку, и каждая строка отличается, поэтому я не уверен, что это лучшая идея. Я очень удивлен, что нет встроенного способа сделать это, кроме strtok (), который выглядит совсем не тем, что я хочу. Спасибо, ребята, любая помощь приветствуется.

0

Решение

использование getlineи, чтобы токенизировать полученную строку, поместите ее в std::stringstream и извлеките токены из этого.

std::string line_string;
while ( getline( file, line_string ) ) {
std::istringstream line( line_string );
std::string token;
while ( line >> token ) {
do something with token
}
}
3

Другие решения

Если вы хотите использовать только стандартную библиотеку, вы можете перейти с getline а затем использовать stringstream в ifstream>> это слово за словом.

В противном случае C ++ действительно весьма ограничен с точки зрения обработки текста, и вы могли бы делать вещи проще с помощью Qt строки и потоки, или строковые алгоритмы от boost (включая split), которые хорошо интегрируются со строками STL.

0

По вопросам рекламы [email protected]