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;
}
代码运行结果如下图


浙公网安备 33010602011771号