c++中如何实现字符串分割-创新互联

这篇文章将为大家详细讲解有关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;
}

本文标题:c++中如何实现字符串分割-创新互联
文章地址:http://myzitong.com/article/dgjseo.html