63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
// 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;
|
|
}
|