Table 11.4. Find algorithms
Algorithm name | Description | Functions |
---|---|---|
find_first | Find the first occurrence of a string in the input | find_first() ifind_first() |
find_last | Find the last occurrence of a string in the input | find_last() ifind_last() |
find_nth | Find the nth (zero-indexed) occurrence of a string in the input | find_nth() ifind_nth() |
find_head | Retrieve the head of a string | find_head() |
find_tail | Retrieve the tail of a string | find_tail() |
find_token | Find first matching token in the string | find_token() |
find_regex | Use the regular expression to search the string | find_regex() |
find | Generic find algorithm | find() |
基础示例:
string str1("a1234_first_nth_first_nth_"); boost::iterator_range<string::iterator> ir; // find_first // ifind_first -- 不区分大小写,其它同find_first ir = find_first(str1, "first"); assert(string(ir.begin(), ir.end()) == "first"); // 比较字符串 assert(ir.begin() - str1.begin() == 6 && ir.end()-str1.begin() == 6 + 5); //查看搜索到的字符串所在位置 to_upper(ir); // 利用iterator_range处理搜索到的字符串 assert(str1 == "a1234_FIRST_nth_first_nth_"); to_lower(ir); assert(str1 == "a1234_first_nth_first_nth_"); ir = find_first(str1, "no"); assert(ir.empty()); // 不存在 assert(string(ir.begin(), ir.end()).empty()); // 不存在,仍可构建一个string ostringstream osstr; osstr << find_first( str1, "_first_" ); assert( osstr.str()=="_first_" ); // find_last -- 同findfirst,只是方向相反 // ifind_last -- 不区分大小写,其它同findlast // find_nth ir = find_nth(str1, "nth", 1); assert(ir.begin() - str1.begin() == 22); ir = find_nth(str1, "nth", 0); assert(ir.begin() - str1.begin() == 12); // find_head // find_tail只是方向相反 ir = find_head(str1, 5); transform(ir.begin(), ir.end(), ir.begin(), bind2nd(plus<char>(), 1)); assert(str1 == "b2345_first_nth_first_nth_"); // find_token ir = find_token(str1, is_any_of("irfst")); assert(string(ir.begin(), ir.end()) == "f"); ir = find_token(str1, is_any_of("xfirts"), token_compress_off ); assert(string(ir.begin(), ir.end()) == "f"); ir = find_token(str1, is_any_of("irfst"), token_compress_on ); assert(string(ir.begin(), ir.end()) == "first"); ir = find_token(str1, is_any_of("fitr "), token_compress_on ); assert(string(ir.begin(), ir.end()) == "fir"); // find_regex boost::regex rx("b[0-9]+_"); ir = find_regex(str1, rx); assert(string(ir.begin(), ir.end()) == "b2345_"); // find_all_regex test table 11.4 里没有列出,boost_1_33_0\libs\algorithm\string\test 目录下有 string str2("b1_b22_b333_b4444"); vector<string> tokens; find_all_regex(tokens, str2, rx); assert(tokens.size() == 3); assert(tokens[0] == "b1_"); assert(tokens[1] == "b22_"); assert(tokens[2] == "b333_"); // find ir = find(str1, first_finder(string("b2345_"))); assert(string(ir.begin(), ir.end()) == "b2345_");;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具