Haikson

[ Everything is possible. Everything takes time. ]

Boost split - разбиваем строку

Никогда не приходилось писать на C++. Но тут решил поэкспериментировать. Задача №1 - написать программу, которая будет напрямую обращаться к postfix. Не буду писать, зачем мне это нужно. Я думаю всем и так понятно (о спаме речи быть не может. просто большое количество писем). Так как я это уже реализовывал на C++, то мне нужно было лишь немного изменить код и программа готова. Но вот проклятие всех программистов на C - работа со строками. То, что на php или Java со строкой можно сделать, приложив минимум усилий, то же самое на Си требует десятки строк кода, а иногда и создания целых библиотек классов :-) На этом и уткнулся я со своей задачей №2 - выгруженный в csv файл список клиентов разбить по полям ИМЯ-ФАМИЛИЯ-ОТЧЕСТВО-EMAIL. Проделав множество махинаций с кодом на языке, который и без того я считал очень сложным, убедился в том, что C++ так просто мне не поддастся. Пришлось идти на хитрость. Поискав в интернете ответ на мой вопрос только на 4 странице поисковика я вышел на рабочий пример разбивки строки по определенному делителю. Как оказалость, данный функционал давно реализован в Boost. Достаточно предисловия... перейдем сразу к делу. Необходимая нам функция описана в файле
boost/algorithm/string/split.hpp
Шаблон
template
      SequenceSequenceT &
      split(SequenceSequenceT &, RangeT &, PredicateT,
            token_compress_mode_type = token_compress_off);
А вот готовый рабочий пример:
#include <iostream>
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

int main(int argc, char**argv){
	typedef vector < string > splitted_vector_type;
	splitted_vector_type split_vec;
	string full_string;

	cin >> full_string;
	split(split_vec, full_string, is_any_of(";"));

	for (int i = 0; i < split_vec.size(); i++)
		cout << split_vec[i] << endl;

	system("PAUSE");
	return 0;
}
Надеюсь приведенный пример поможет многим сэкономить время.