summaryrefslogtreecommitdiff
path: root/libs/algorithm/string/example/split_example.cpp
blob: 27e261c9396ad168fd8b03c6bc1763912dcc7e4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//  Boost string_algo library example file  ---------------------------------//

//  Copyright Pavol Droba 2002-2003. Use, modification and
//  distribution is subject to the Boost Software License, Version
//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org for updates, documentation, and revision history.

#include <string>
#include <vector>
#include <iostream>
#include <iterator>
#include <functional>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/find_iterator.hpp>

using namespace std;
using namespace boost;

int main()
{  
    cout << "* Split Example *" << endl << endl;

    string str1("abc-*-ABC-*-aBc");

    cout << "Before: " << str1 << endl;

    // Find all 'abc' substrings (ignoring the case)
    // Create a find_iterator
    typedef find_iterator<string::iterator> string_find_iterator;
    for(string_find_iterator It=
            make_find_iterator(str1, first_finder("abc", is_iequal()));
        It!=string_find_iterator();
        ++It)
    {
        cout << copy_range<std::string>(*It) << endl;
        // shift all chars in the match by one
        transform( 
            It->begin(), It->end(), 
            It->begin(), 
            bind2nd( plus<char>(), 1 ) );
    }

    // Print the string now
    cout << "After: " << str1 << endl;
    
    // Split the string into tokens ( use '-' and '*' as delimiters )
    // We need copies of the input only, and adjacent tokens are compressed
    vector<std::string> ResultCopy;
    split(ResultCopy, str1, is_any_of("-*"), token_compress_on);

    for(unsigned int nIndex=0; nIndex<ResultCopy.size(); nIndex++)
    {
        cout << nIndex << ":" << ResultCopy[nIndex] << endl;
    };

    cout << endl;

    return 0;
}