小工具知识网

当前位置: 首页 > 行业知识 > C++中string如何实现字符串分割函数split()

行业知识

C++中string如何实现字符串分割函数split()

2026-11-09 10:02:52 来源:互联网转载

C++中string实现字符串分割方法

一、使用stringstream流

二、使用string类提供的find方法与strsub方法

三、使用C库函数strtok

四、使用regex_token_iterator(正则表达式)

一、使用stringstream流

这里我们只需要用到 istringstream(字符串输入流) 构造字符串流,然后从字符串流中按照一定的格式读取数据即可。

通常我们使用 cin 从流中读取数据,而我们也可以使用 getline 读取,而后者在读取时可以选择接受的数据格式,其函数原型如下:

// istream & getline(char* buf, int bufSize);// 读到 \n 为止istream & getline(char* buf, int bufSize, char delim); //读到 delim 字符为止// \n 或 delim 都不会被读入 buf,但会被从文件输入流缓冲区中取走

因此,我们可以按照此方式设计一个C++中的string split函数。

void Stringsplit(string str,const const char split){istringstream iss(str);// 输入流string token;// 接收缓冲区while (getline(iss, token, split))// 以split为分隔符{cout istringstream iss(str);// 输入流string token;// 接收缓冲区while (getline(iss, token, split))// 以split为分隔符{res.push_back(token);}}string str("This is a test");Stringsplit(str, ' ');// 打印子串vectorif (str == "")return;//在字符串末尾也加入分隔符,方便截取最后一段string strs = str + split;size_t pos = strs.find(split);// 若找不到内容则字符串搜索函数返回 nposwhile (pos != strs.npos){string temp = strs.substr(0, pos);res.push_back(temp);//去掉已分割的字符串,在剩下的字符串中进行分割strs = strs.substr(pos + 1, strs.size());pos = strs.find(split);}}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;}Stringsplit(str, string(1,split), res);// 调用上一个版本的Stringsplit()}vector//std::regex ws_re("\s+"); // 正则表达式,匹配空格 std::regex reg(split);// 匹配splitstd::sregex_token_iterator pos(str.begin(), str.end(), reg, -1);decltype(pos) end;              // 自动推导类型 for (; pos != end; ++pos){res.push_back(pos-str());}}// 单个字符分词vector

上一篇:酒店服务器怎么搭建?

下一篇:DZ论坛301设置详解,一步到位指南,轻松掌握!