欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

 

上一篇: c++ 字符串切割

下一篇: BOM