首页 > 编程语言 >Code-C++-字符串分割

Code-C++-字符串分割

时间:2023-11-18 17:55:33浏览次数:40  
标签:Code const string strs pos C++ split str 字符串

Code-C++-字符串分割

转自【C++中string如何实现字符串分割函数split()——4种方法 - CSDN App】http://t.csdnimg.cn/8iWb7

  • stringstream getline()
  • string find() substr()
  • c char strtok() strtok_r()
  • regex_token_iterator<>

getline()

void Stringsplit(string str,const const char split)
{
	istringstream iss(str);	// 输入流
	string token;			// 接收缓冲区
	while (getline(iss, token, split))	// 以split为分隔符
	{
		cout << token << endl; // 输出
	}
}

find() substr()

// 使用字符分割
void Stringsplit(const string& str, const char split, vector<string>& res)
{
	if (str == "")		return;
	//在字符串末尾也加入分隔符,方便截取最后一段
	string strs = str + split;
	size_t pos = strs.find(split);
 
	// 若找不到内容则字符串搜索函数返回 npos
	while (pos != strs.npos)
	{
		string temp = strs.substr(0, pos);
		res.push_back(temp);
		//去掉已分割的字符串,在剩下的字符串中进行分割
		strs = strs.substr(pos + 1, strs.size());
		pos = strs.find(split);
	}
}
// 使用字符串分割
void Stringsplit(const string& str, const string& splits, vector<string>& res)
{
	if (str == "")		return;
	//在字符串末尾也加入分隔符,方便截取最后一段
	string strs = str + splits;
	size_t pos = strs.find(splits);
	int step = splits.size();
 
	// 若找不到内容则字符串搜索函数返回 npos
	while (pos != strs.npos)
	{
		string temp = strs.substr(0, pos);
		res.push_back(temp);
		//去掉已分割的字符串,在剩下的字符串中进行分割
		strs = strs.substr(pos + step, strs.size());
		pos = strs.find(splits);
	}
}

strtok()

void Stringsplit(const string& str, const string& split, vector<string>& res)
{
	char* strc = new char[str.size() + 1];
	strcpy(strc, str.c_str());   // 将str拷贝到 char类型的strc中
	char* temp = strtok(strc, split.c_str());
	while (temp != NULL)
	{
		res.push_back(string(temp));		
		temp = strtok(NULL, split.c_str());	// 下一个被分割的串
	}
	delete[] strc;
}

void Stringsplit(const string& str, const char split, vector<string>& res)
{
	Stringsplit(str, string(1,split), res);	// 调用上一个版本的Stringsplit()
}

regex_token_iterator<>

void Stringsplit(const string& str, const string& split, vector<string>& res)
{
	//std::regex ws_re("\\s+"); // 正则表达式,匹配空格 
	std::regex reg(split);		// 匹配split
	std::sregex_token_iterator pos(str.begin(), str.end(), reg, -1);
	decltype(pos) end;              // 自动推导类型 
	for (; pos != end; ++pos)
	{
		res.push_back(pos->str());
	}
}

标签:Code,const,string,strs,pos,C++,split,str,字符串
From: https://www.cnblogs.com/yongchao/p/17840817.html

相关文章

  • Educational Codeforces Round 13 E
    tilian最开始看错了以为是可以任意选择两人or选择一人胜出但题意是可以选择下一个擂主是谁考虑dp的话我们显然需要记录一个state以及当前擂主是谁转移就是dp[state][i]=max(dp[state][i],dp[state(1<<j)][j]*a[i][j]+dp[state(1<<i)]*a[j][i])意义是我们枚举他后一个交......
  • c++线程专题
    逐步更新中~~~,参考书籍《C++并发编程实战(第2版)》,不照搬书,只写理解感悟。引入头文件#include<thread>线程启动std::threadt(my_func);若需等待线程执行完毕,才继续之后的代码,用joinif(t.joinable()){t.join();}若不等待,可以分离出去(分离出去的线程被称为守护......
  • 【11月LeetCode组队打卡】Task2--String & StringMatch
    在CSP里面好多道“水题“基本都离不开字符串/数组的模拟滚动哈希,字典树,DP几个强强联合基本可以横扫所有难度的字符串算法了,所以在这个task里会好好消化其中前二字符串和数组有很多相似之处,比如同样使用下标的方式来访问单个字符。根据字符串的特点,将字符串问题分为以下几种:字......
  • C++ Primer学习笔记——第十二章
    第十二章动态内存前言在此之前,我们使用的程序中对象都有着严格定义的生存期:全局对象,在程序启动时分配,在程序结束是销毁。局部自动对象,当进入定义所在程序时创建,在离开块时销毁。局部static对象,在第一次使用前分配,在程序结束时销毁。显然这存在限制,为此C++支持动态分配对......
  • C++ 观察者模式实现
    观察者模式主体(被观察者)通知一个或多个观察者状态改变/数据更新/事件发生。描述C++实现观察者模式有几个要点:观察者都有一个共同的抽象基类Listener,定义了一个纯虚接口OnNotified(),主体调用该接口通知观察者每个观察者ConcreteListener继承自抽象基类Listener,并实现......
  • vscode devcontainer 配置方法
    在vscode中,可以在.devcontainer内使用配置文件设定项目应该使用什么类型的容器进行开发。官方教程DevelopinginsideaContainerusingVisualStudioCodeRemoteDevelopment配置方法左下角OpenaRemoteWindow——添加开发容器配置文件——接下来是一些细节选......
  • AtCoder Beginner Contest 328
    B-11/11题意是:有n个月份,要你计算出月份上的每个数位与对应月份中的每个日期数位一致的日期和直接模拟即可usingnamespacestd;inta[200];intp;boolcheck(intx){ p=x%10; x/=10; while(x){ intq=x%10; if(q!=p)returnfalse; x/=10; } returntrue;}boo......
  • Codeforces Round 909 (Div. 3) A-E
    CodeforcesRound909(Div.3)A.GamewithIntegers题意:两人轮流操作,可以加一或减一,若结果能被3整除则输出First,否则输出Second思路:若n不能被3整除,则第一个人可以直接通过加一或减一使结果被3整除,反之则一定不能代码:#include<bits/stdc++.h>usingnamespacestd;cons......
  • Java零基础入门-字符串
    Java零基础入门-字符串前言Java是一门非常强大的编程语言,在计算机领域拥有广泛的应用。作为Java的入门阶段,掌握字符串的基本概念以及使用方法是非常重要的,它也是Java程序中经常使用的一种数据类型。本文将从Java字符串的定义、创建、内容操作等方面进行详细阐述,给读者带来更加全......
  • C/C++ 运用VMI接口查询系统信息
    WindowsManagementInstrumentation(WMI)是一种用于管理和监视Windows操作系统的框架。它为开发人员、系统管理员和自动化工具提供了一种标准的接口,通过这个接口,可以获取有关计算机系统硬件、操作系统和应用程序的信息,以及对系统进行管理和控制的能力。WMI允许通过编程方式查询系......