Возможный дубликат:
Разделение строки в C ++
Я пытаюсь прочитать данные из файла, где каждая строка имеет 15 полей, разделенных запятыми и пробелами. Данные не относятся к одному типу. В настоящее время я занимаюсь чтением данных построчно и передаю каждую строку в istringstream, а между каждым чтением я делаю следующее:
ins.ignore(25,','); //ins is the istringstream
Мне, однако, не нравится мой метод, и я бы хотел более чистый. Что было бы лучшим способом сделать это? Также я хотел бы использовать только stl и никаких внешних библиотек. В основном, я хочу, чтобы токенизировал каждую строку, используя запятую в качестве разделителя.
Просто используйте пользовательский манипулятор:
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 ...
Более чистый метод (если я правильно понимаю) — это просто прочитать запятую в фиктивную переменную
char comma;
ins >> comma;
Это пропустит любой пробел, а затем прочитает запятую, которую затем можно игнорировать.