C++如何分割字符串?

实现思路

处理字符的时候,经常需要分割字符串,使用C语言处理比较麻烦,这里C++可以使用getline函数进行字符的分割,需要配合输入流对象istringstream,然后将分割结果存入vector中,这样后续操作就简单很多。

getline函数介绍

从流释出字符,直至行尾或指定的分隔符 delim 。

第一版本等价于 getline(s, count, widen('\n')) 。

表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,从 *this 释出字符并存储它们于首元素为 s 所指向的数组的相继位置,直至出现任何下列条件(按出示顺序测试):

输入序列中出现文件尾条件(该情况下执行 setstate(eofbit) )
下个可用字符 c 是以 Traits::eq(c, delim) 确定的分隔符。释出该分隔符(不同于 basic_istream::get() )并计入 gcount() ,但不存储它。
已经释出 count-1 个字符(该情况下执行 setstate(failbit) )。
若函数未释出字符(即 count < 1 ),则执行 setstate(failbit) 。

任何情况下,若 count>0 ,则它存储空字符 CharT() 到数组的下个相继位置,并更新 gcount() 。

参数
s - 指向要存储字符到的字符串的指针
count - s 所指向的字符串的大小
delim - 释出所终止于的分隔字符。释出但不存储它。

返回值
*this

实现代码

#include <iostream>
#include <sstream>
#include<vector>
using namespace std;

vector<string> Stringsplit(string str, const char split)
{
	vector<string> items;
	istringstream iss(str);	// 输入流
	string token;			// 接收缓冲区
	while (getline(iss, token, split))	// 以split为分隔符
	{
		items.push_back(token);
	}
	return items;
}
void hello(int *arr,int length) {
	return;
}
int main()
{
	string msg = "Hello|World|HUAT";
	vector<string> items = Stringsplit(msg, '|');
	for (auto item : items)
		cout << item << " ";
	return 0;
}

代码运行结果如下图

posted @ 2022-11-20 00:06  蠢蛋快跑  阅读(616)  评论(0)    收藏  举报