The Boost.StringAlgorithms library provides many free-standing functions for string manipulation.
1. converting strings to uppercase
#include <boost/algorithm/string.hpp> #include <string> #include <iostream> using namespace boost::algorithm int main() { std::string s = "Boost C++ Libraries"; std::cout << to_upper_copy(s) << std::endl; return 0; }
The function boost::algorithm::to_upper_copy() converts a string to uppercase, and boost::algorithm::to_lower_copy() converts a string to lowecase. Both functions return a copy of the input string, converted to the specified case. To convert the string in place, use the functions boost::algorithm::to_upper() or boost::algorithm::to_lower().
2. Algorithms to remove characters from a string
#include <boost/algorithm/string.hpp> #include <string> #include <iostream> using namespace boost::algorithm int main() { std::string s = "Boost C++ Libraries"; std::cout << erase_first_copy(s, "s") << std::endl; 删除第一个出现的s字符 std::cout << erase_nth_copy(s, "s", 0) << std::endl; std::cout << erase_last_copy(s, "s") << std::endl; std::cout << erase_all_copy(s, "s") << std::endl; std::cout << erase_head_copy(s, 5) << std::endl; 删除从头部开始后的5个字符 std::cout << erase_tail_copy(s, 9) << std::endl; 删除从尾部开始的9个字符 return 0; }
输出结果为:
Boot C++ Libraries
Boot C++ Libraries
Boost C++ Librarie
Boot C++ Librarie
C++ Libraries
Boost C++
3. Searching for substrings
#include <boost/algorithm/string.hpp> #include <string> #include <iostream> using namespace boost::algorithm; int main() { std::string s = "Boost C++ Libraries"; boost::iterator_range<std::string::iterator> r = find_first(s, "C++"); std::cout << r << std::endl; r = find_first(s, "xyz"); std::cout << r << std::endl; return 0; }
输出为:
C++
空
functions such as boost::algorithm::find_first(), boost::algorithm::find_last(), boost::algorithm::find_nth(), boost::algorithm::find_heand() and boost::algorithm::find_tail(), these functions return a pair of iterators of type boost::iterator_range. Because the operator operator<< is overloaded for boost::iterator_range, the result of the individual search algorithm can be written directly to standard output.
4. Concatenatin strings with boost::algorithm::join() 连接字符串
#include <boost/algorithm/string.hpp> #include <string> #include <vector> #include <iostream> using namespace boost::algorithm; int main() { std::vector<std::string> v{"Boost", "C++", "Libraries"}; join(v, " "); return 0; }
输出为:Boost C++ Libraries
5. replace characters in a string
functions: boost::algorithm::replace_first_copy(), boost::algorithm::replace_nth_copy(), boost::algorithm::replace_last_copy(), boost::algorithm::replace_all_copy(), boost::algorithm::replace_head_copy(), boost::algorithm::replace_tail_copy()
6. trim strings
functions: boost::algorithm::trim_left_copy(), boost::algorithm::trim_right_copy(), boost::algorithm::trim_copy() to remove spaces on either end of a string.
Boost.StringAlgorithms lets you provide a predicate as an additional parameter for different functions to determine which characters of the string the function is applied to. The versions with predicate are: boost::algorithm::trim_right_copy_if(), boost::algorithm::trim_left_copy_if(), boost::algorithm::trim_copy_if()
7. creating predicates with boost::algorithm::is_any_of()
#include <boost/algorithm/string.hpp> #include <string> #include <iostream> using namespace boost::algorithm; int main() { std::string s = "--Boost C++ Libraries--"; std::cout << trim_left_copy_if(s, is_any_of("-")) << std::endl; std::cout << trim_right_copy_if(s, is_any_of("-")) << std::endl; std::cout << trim_copy_if(s, is_any_of("-")) << std::endl; return 0; }
输出为:
Boost C++ Libraries--
--Boost C++ Libraries
Boost C++ Libraries
function called boost::algorithm::is_any_of(), which is a helper function to create a predicate that checks whether a certain character--passed as parameter to is_any_of() exists in a string. With boost::algorithm::is_any_of(), the characters for trimming a string can be specified.
many helper functions that return commonly used predicates: boost::algorithm::is_digit(), boost::algorithm::is_upper(), boost::algorithm::is_lower().
8. Algorithms to compare strings with others
#include <boost/algorithm/string.hpp> #include <string> #include <iostream> using namespace boost::algorithm; int main() { std::string s = "Boost C++ Libraries"; std::cout.setf(std::ios::boolalpha); std::cout < starts_with(s, "Boost") << std::endl; std::cout << ends_with(s, "Libraries") << std::endl; std::cout << contains(s, "C++") << std::endl; std::cout << lexicographical_compare(s, "Boost") << std::endl; return 0; }
输出为:
true
true
true
false
9. Splitting strings with boost::algorithm::split()
#include <boost/algorithm/string.hpp> #include <string> #include <vector> #include <iostream> using namespace boost::algorithm; int main() { std::string s = "Boost C++ Libraries"; std::vector<std::string> v; split(v, s, is_space()); std::cout << v.size() << std::endl; return 0; }
a given string can be split based on a delimiter. The substrings are stored in a container. The function requires as its third parameter a predicate that tests each character an checks whether the string should be split at the given position.
10. Searching strings with boost::algorithm::find_regex()
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string/regex.hpp> #include <string> #include <iostream> using namespace boost::algorithm; int main() { std::string s = "Boost C++ Libraries"; boost::iterator_range<std::string::iterator> r = find_regex(s, boost::regex{"\w\+\+"}); std::cout << r << std::endl; return 0; }
输出为:C++