C++字符串切割
程序员文章站
2022-07-14 11:57:46
...
一.字符串数组切割
函数原型:char *strtok_s( char *strToken, const char *strDelimit, char **buf);
参数:str,待分割的字符串;delimiters,字符串分割符,buf,自定义的变量。
1.原理:该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。
2.使用方法:
①在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回指向被分割出片段的指针。
②使用函数strtok_s进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的str已经不一样了。第一次分割之后,原字符串str变成分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误,所以自定义变量buf,存储剩余字符串。
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
char chs[] = "hello world !!!";
char* rest = NULL;
char* ptr = strtok_s(chs, " ", &rest);
while (ptr != NULL) {
cout << ptr << endl;
ptr = strtok_s(NULL, " ", &rest);
}
return 0;
}
二.String类型切割
将字符串绑定到输入流istringstream,然后使用getline。
#include<iostream>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
void split(const string& str, vector<string>& str_vec, const char delimeter) {
str_vec.clear();
istringstream iss(str);
string temp;
while (getline(iss, temp, delimeter)) {
str_vec.push_back(temp);
}
}
int main() {
string str = "12,34";
vector<string>str_vec;
split(str, str_vec, ',');
return 0;
}