Токенизация строки в c ++ с использованием stl

Возможный дубликат:
Разделение строки в C ++

Я пытаюсь прочитать данные из файла, где каждая строка имеет 15 полей, разделенных запятыми и пробелами. Данные не относятся к одному типу. В настоящее время я занимаюсь чтением данных построчно и передаю каждую строку в istringstream, а между каждым чтением я делаю следующее:

ins.ignore(25,','); //ins is the istringstream

Мне, однако, не нравится мой метод, и я бы хотел более чистый. Что было бы лучшим способом сделать это? Также я хотел бы использовать только stl и никаких внешних библиотек. В основном, я хочу, чтобы токенизировал каждую строку, используя запятую в качестве разделителя.

2

Решение

Просто используйте пользовательский манипулятор:

std::istream& comma(std::istream& in) {
if ((in >> std::ws).get() != std::char_traits<char>::to_int_type(',')) {
in.setstate(std::ios_base::failbit);
}
return in;
}
...
in >> v0 >> comma >> v1 >> comma ...
3

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

Более чистый метод (если я правильно понимаю) — это просто прочитать запятую в фиктивную переменную

char comma;
ins >> comma;

Это пропустит любой пробел, а затем прочитает запятую, которую затем можно игнорировать.

0

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