boost::string_algo详解2——find相关函数
来源:互联网 发布:托米.韦素 知乎 编辑:程序博客网 时间:2024/06/05 05:54
函数声明:- template<typename Range1T, typename Range2T>
- iterator_range find_first(Range1T & Input, const Range2T & Search);
- template<typename Range1T, typename Range2T>
- iterator_range find_last(Range1T & Input, const Range2T & Search);
- template<typename Range1T, typename Range2T>
- iterator_range find_nth(Range1T &Input, const Range2T & Search, int Nth);
- template<typename RangeT>
- find_head(RangeT &Input, int N);
- template<typename RangeT>
- find_tail(RangeT & Input, int N);
例子:-
-
-
-
-
- void test_string_find_string()
- {
- std::string str1("a1234_first_nth_first_nth_");
- boost::iterator_range<std::string::iterator> ir;
-
-
- ir = boost::find_first(str1, "first");
-
- assert(std::string(ir.begin(), ir.end()) == "first");
-
- assert(ir.begin() - str1.begin() == 6 && ir.end() - str1.begin() == 6 + 5);
-
- boost::to_upper(ir);
- assert(str1 == "a1234_FIRST_nth_first_nth_");
- boost::to_lower(ir);
- assert(str1 == "a1234_first_nth_first_nth_");
-
-
- ir = boost::find_first(str1, "no");
- assert(ir.empty());
- assert(std::string(ir.begin(), ir.end()).empty());
- std::ostringstream osstr;
- osstr << boost::find_first(str1, "_first_");
- assert(osstr.str() == "_first_");
- }
find_token的函数声明- template<typename RangeT, typename PredicateT>
- iterator_range< typename range_iterator< RangeT >::type >
- find_token(RangeT & Input, PredicateT Pred,
- token_compress_mode_type eCompress = token_compress_off);
find_token的例子- void test_string_find_token()
- {
- using namespace boost;
-
- std::string str1("ab1234_first_nth_first_nth_");
- iterator_range<std::string::iterator> ir;
-
- ir = find_token(str1, is_any_of("irfst"));
- assert(std::string(ir.begin(), ir.end()) == "f");
-
- ir = find_token(str1, is_any_of("xfirts"), token_compress_off);
- assert(std::string(ir.begin(), ir.end()) == "f");
-
- ir = find_token(str1, is_any_of("irfst"), token_compress_on);
- assert(std::string(ir.begin(), ir.end()) == "first");
-
- ir = find_token(str1, is_any_of("fitr "), token_compress_on);
- assert(std::string(ir.begin(), ir.end()) == "fir");
-
- ir = find_token(str1, is_lower(), token_compress_on);
- assert(std::string(ir.begin(), ir.end()) == "ab");
- }
find_regex的例子-
-
-
- void test_string_find_regex()
- {
- using namespace boost;
-
- std::string str1("ab1234_first_nth_first_nth_");
- iterator_range<std::string::iterator> ir;
- regex rx("b[0-9]+_");
-
- ir = find_regex(str1, rx);
- assert(std::string(ir.begin(), ir.end()) == "b1234_");
-
- std::string str2("b1_b22_b333_b4444");
- std::vector<std::string> tokens;
- find_all_regex(tokens, str2, rx);
- assert(tokens.size() == 3);
- assert(tokens[0] == "b1_");
- assert(tokens[1] == "b22_");
- assert(tokens[2] == "b333_");
-
-
- std::string value = "123a1cxxxxa56c";
- regex pattern("a[0-9]+c");
- iterator_range<std::string::iterator> find_result;
- find_result = algorithm::find_regex(value, pattern);
- assert(!find_result.empty());
-
- std::vector<std::string> results;
- find_all_regex(results, value, pattern);
- assert("a1c" == results[0]);
- assert("a56c" == results[1]);
- assert(!results.empty());
-
- value = "10.10.10.10 1.1.1.1";
- boost::regex ip_pattern("(\\d{1, 3}.){3}\\d{1, 3}");
- find_all_regex(results, value, ip_pattern);
- assert("10.10.10.10" == results[0]);
- assert("1.1.1.1" == results[1]);
- assert(!results.empty());
- }