首页 / C++ / C++ 分割字符串的一些方法
C++ 分割字符串的一些方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 分割字符串的一些方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2444字,纯文字阅读大概需要4分钟。
内容图文
1 void split(conststring& s, vector<string>& tokens, conststring& delimiters = "") 2{ 3string::size_type lastPos = s.find_first_not_of(delimiters, 0); 4string::size_type pos = s.find_first_of(delimiters, lastPos); 5while (string::npos != pos || string::npos != lastPos) { 6 tokens.emplace_back(s.substr(lastPos, pos - lastPos)); 7 lastPos = s.find_first_not_of(delimiters, pos); 8 pos = s.find_first_of(delimiters, lastPos); 9 } 10 }
使用正则表达式 (C++ 11)
1 std::string text = "Quick brown fox."; 2 std::regex ws_re("\\s+"); // whitespace3 std::vector<std::string> v(std::sregex_token_iterator(text.begin(), text.end(), ws_re, -1), 4 std::sregex_token_iterator()); 5for(auto&& s: v) 6 std::cout<<s<<"\n";
使用 istringstream 和 getline 实现分割
1 void split(vector<string> &strings, string data) { 2 istringstream f(data); 3 vector<string> strings; 4string s; 5char sep = ‘,‘; 6while (getline(f, s, sep)) { 7 strings.push_back(s); 8 } 9 }
使用 strtok 函数分割 C 风格字符串 (char *)
1 #include <string.h> 2 #include <iostream> 3 #include <string> 4usingnamespace std; 5int main() 6{ 7string str = "one two three four five"; 8char *token = strtok(str.data(), ""); // non-const data() needs c++17 9while (token != NULL) { 10 std::cout << token << ‘\n‘; 11 token = strtok(NULL, ""); 12 } 13 }
strtok的第一个参数类型是 char * 而不是 const char *,它会改变输入的字符串。
使用 string_view 改进第一个 split 函数 (C++ 17)
1 std::vector<std::string_view> 2 splitSV(std::string_view strv, std::string_view delims = "") 3{ 4 std::vector<std::string_view> output; 5 size_t first = 0; 6 7while (first < strv.size()) 8 { 9const auto second = strv.find_first_of(delims, first); 1011if (first != second) 12 output.emplace_back(strv.substr(first, second-first)); 1314if (second == std::string_view::npos) 15break; 1617 first = second + 1; 18 } 1920return output; 21 }
string_view 相比 string 减少了拷贝,提升了性能
参考:Bartek‘s coding blog: Speeding Up string_view String Split Implementation (bfilipek.com)
C++ 20 的标准库中提供了 ranges,有专门的 split view,使用 str | split(‘ ‘) 切分字符串
1 string str("hello world test split"); 2 auto sv = str 3 | ranges::views::split(‘‘) 4 | ranges::views::transform([](auto&& i){ 5return i | ranges::to<string>(); }) 6 | ranges::to<vector>(); 7 8for(auto&& s: sv) { 9 cout<<s<<"\n"; 10 }
原文:https://www.cnblogs.com/rider101/p/15056693.html
内容总结
以上是互联网集市为您收集整理的C++ 分割字符串的一些方法全部内容,希望文章能够帮你解决C++ 分割字符串的一些方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。