这篇文章将为大家详细讲解有关c++中如何实现字符串分割,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
10多年专注成都网站制作,成都企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都企业网站建设,高端网页制作,对资质代办等多个行业,拥有丰富的网站维护经验。C++ 中经常需要对字符串按照分隔符进行分割以获得子串序列,子串的顺序与其在原字符串中出现的顺序一致。一般有两种需求场景:
(1)给定一个分隔符(单个字符或子串)分割字符串;
(2)给定一个或多个分隔符(单个字符),分割字符串。
当给定的分隔符不在原字符串中,则原字符串不被分割,返回单个元素为原字符串的 vector。
注意,本文实现时,如果被分割后的子串为空串,则不计入最终的子串序列。比如原字符串是"a,b",分隔符为",",那么分割后的子串序列为 [“a”, “b”],而不是 [“a”, “”, “b”]。
1.单个分隔符(单个字符或子串)分割字符串
#include#include #include using namespace std; //@brief: 指定单个分隔符(单个字符或子串)分割字符串 //@param: src 原字符串;delimiter 分隔符,单个字符或子串 vector splitStr(const string& src, const string& delimiter) { std::vector vetStr; // 入参检查 // 1.原字符串为空或等于分隔符,返回空 vector if (src == "" || src == delimiter) { return vetStr; } // 2.分隔符为空返回单个元素为原字符串的 vector if (delimiter == "") { vetStr.push_back(src); return vetStr; } string::size_type startPos = 0; auto index = src.find(delimiter); while (index != string::npos) { auto str = src.substr(startPos, index - startPos); if (str != "") { vetStr.push_back(str); } startPos = index + delimiter.length(); index = src.find(delimiter, startPos); } // 取最后一个子串 auto str = src.substr(startPos); if (str != "") { vetStr.push_back(str); } return vetStr; }