Возможный дубликат:
Как я могу токенизировать строку в C ++?
У меня есть этот текстовый файл
q1 t q2
q2 e q3
q3 x q4
q4 t q5 q6 q11
q5 | q6 q11
Я хочу извлечь каждый элемент, который разделен пробелом. Например, в первой строке я хочу иметь возможность извлекать «q1», «t» и «q2» как отдельные токены.
Я думаю, что есть два способа сделать это
читать из файла, токен за токеном, используя ifstream >>. Проблема, с которой я сталкиваюсь при таком подходе, состоит в том, что я не знаю, как определить, когда был достигнут конец строки, чтобы я мог перейти к следующей строке.
Другой подход — получить всю строку сразу с помощью getline (); Проблема с этим подходом заключается в том, что я должен сам маркировать строку, и каждая строка отличается, поэтому я не уверен, что это лучшая идея. Я очень удивлен, что нет встроенного способа сделать это, кроме strtok (), который выглядит совсем не тем, что я хочу. Спасибо, ребята, любая помощь приветствуется.
использование 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
}
}
Если вы хотите использовать только стандартную библиотеку, вы можете перейти с getline
а затем использовать stringstream
в ifstream>>
это слово за словом.
В противном случае C ++ действительно весьма ограничен с точки зрения обработки текста, и вы могли бы делать вещи проще с помощью Qt строки и потоки, или строковые алгоритмы от boost (включая split), которые хорошо интегрируются со строками STL.