1 // Boost string_algo library example file ---------------------------------//
2
3 // Copyright Pavol Droba 2002-2003. Use, modification and
4 // distribution is subject to the Boost Software License, Version
5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7
8 // See http://www.boost.org for updates, documentation, and revision history.
9
10 #include <string>
11 #include <iostream>
12 #include <iterator>
13 //#include <boost/algorithm/string/replace.hpp>
14 //#include <boost/algorithm/string/erase.hpp>
15 //#include <boost/algorithm/string/case_conv.hpp>
16 #include <boost/algorithm/string.hpp>
17
18 //Following two includes contain second-layer function.
19 //They are already included by first-layer header
20
21 //#include <boost/algorithm/string/replace2.hpp>
22 //#include <boost/algorithm/string/find2.hpp>
23
24 using namespace std;
25 using namespace boost;
26
27 // uppercase formatter
28 /*
29 Convert an input to upper case.
30 Note, that this formatter can be used only on std::string inputs.
31 */
upcase_formatter(const iterator_range<string::const_iterator> & Replace)32 inline string upcase_formatter(
33 const iterator_range<string::const_iterator>& Replace )
34 {
35 string Temp(Replace.begin(), Replace.end());
36 to_upper(Temp);
37 return Temp;
38 }
39
main()40 int main()
41 {
42 cout << "* Replace Example *" << endl << endl;
43
44 string str1("abc___cde___efg");
45
46 // Erase 6-9th characters from the string
47 cout << "str1 without 6th to 9th character:" <<
48 erase_range_copy( str1, make_iterator_range(str1.begin()+6, str1.begin()+9) ) << endl;
49
50 // Replace 6-9th character with '+++'
51 cout << "str1 with 6th to 9th character replaced with '+++': " <<
52 replace_range_copy(
53 str1, make_iterator_range(str1.begin()+6, str1.begin()+9), "+++" ) << endl;
54
55 cout << "str1 with 'cde' replaced with 'XYZ': ";
56
57 // Replace first 'cde' with 'XYZ'. Modify the input
58 replace_first_copy( ostream_iterator<char>(cout), str1, "cde", "XYZ" );
59 cout << endl;
60
61 // Replace all '___'
62 cout << "str1 with all '___' replaced with '---': " <<
63 replace_all_copy( str1, "___", "---" ) << endl;
64
65 // Erase all '___'
66 cout << "str1 without all '___': " <<
67 erase_all_copy( str1, "___" ) << endl;
68
69 // replace third and 5th occurrence of _ in str1
70 // note that nth argument is 0-based
71 replace_nth( str1, "_", 4, "+" );
72 replace_nth( str1, "_", 2, "+" );
73
74 cout << "str1 with third and 5th occurrence of _ replace: " << str1 << endl;
75
76 // Custom formatter examples
77 string str2("abC-xxxx-AbC-xxxx-abc");
78
79 // Find string 'abc' ignoring the case and convert it to upper case
80 cout << "Upcase all 'abc'(s) in the str2: " <<
81 find_format_all_copy(
82 str2,
83 first_finder("abc", is_iequal()),
84 upcase_formatter );
85
86 cout << endl;
87
88 return 0;
89 }
90