前言:
C++字符串string竟然没有提供类似split这样的字符串分割函数,十分不方便。于是乎我们就要自己来实现。接下来我们要实现3种分割方式,一种是使用头文件sstream中的istringstream类提供的getline函数,一种是istringstream类提供>>运算符,另一种是使用C头文件string.h中的strtok函数。
正文:
#include <iostream>
#include <string>
#include <string.h>
#include <sstream>
#include <vector>
using namespace std;
void getlineTest() {
string str = "Bob hit a ball";
vector<string> vec;
istringstream iss(str);
string strtmp;
while (getline(iss, strtmp, ' ')) { //如果有多个连续空格,则会截到空串
vec.push_back(strtmp);
}
for (string str : vec) {
cout << str << endl;
}
}
void operatorTest() {
string str = "Bob hit a ball";
vector<string> vec;
istringstream iss(str);
string strtmp;
while (iss >> strtmp) { //如果用>>来处理输入,则会忽略掉所有空格
vec.push_back(strtmp);
}
for (string str : vec) {
cout << str << endl;
}
}
void strtokTest() {
string str = "Bob hit a,,, ball";
vector<string> vec;
char* cstr = (char*)str.c_str();
const char* delim = " ,.";
char* cstrtmp;
cstrtmp = strtok(cstr, delim); //可按多种字符分割,且能忽略掉delim中所有的字符
while (cstrtmp != NULL) {
vec.push_back(cstrtmp);
cstrtmp = strtok(NULL, delim);
}
for (string str : vec) {
cout << str << endl;
}
}
int main()
{
getlineTest();
operatorTest();
strtokTest();
}
总结:
以上是2种常见的C++方式的分割字符串,非常常用,应按照模板来记。