C++에서 문자열을 처리하는 것은 매우 번거로운 작업 중에 하나이다.
특히 여러개의 문자열 집합 사이에 구분자를 넣고 마지막에 구분자를 빼는 작업도 쉬운일이 아니다.
이를 쉽게 처리해주는 boost/spirit/karma 예제를 소개합니다.
#include < string >
#include < list >
#include < boost/spirit/include/karma.hpp >

bool StringSerializer(const std::list< std::string >& inputList, const std::string& delimiter, std::string& serialized )
{
    using namespace boost::spirit;

    serialized.clear();
    std::back_insert_iterator< std::string > inserter(serialized);

    const size_t repeatableCount = inputList.empty() ? 0 : inputList.size() - 1;
    bool bSuccessed = karma::generate( inserter,
        (karma::repeat(repeatableCount)[karma::string << karma::lit(delimiter.c_str())])
        << karma::string, inputList);

    return bSuccessed;
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::list< std::string > strList;
    strList.push_back("123");
    strList.push_back("456");
    strList.push_back("789");

    std::string serialized;
    StringSerializer(strList, std::string(", "), serialized);

    std::cout << serialized.c_str() << std::endl;

	return 0;
}
2013/03/22 17:37 2013/03/22 17:37

덧글을 달아 주세요