高效的利用strtok函数对字符串进行分割

概要

利用C库函数strtok按照分割符实现对字符串的高效分割。

strtok 是 C 标准库中的一个函数,用于将字符串分割成多个子字符串(token)。它通过指定的分隔符将字符串分解,并返回每个子字符串的指针。
函数原型:char *strtok(char *str, const char *delim);
str:要分割的字符串。第一次调用 strtok() 时,这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL,以便继续从上次的位置分割。
delim:一个包含多个分隔符的字符串。这些字符被用作分隔符,将 str 分割成多个子串。

代码举例

#include
#include
#include
#include

int main(){
	char const* st = "123;456;789";
	char const* flag = ";";
	std::vector<std::string> vs;
	size_t len = strlen(st);
	char* tmp = new char[len + 1];
	strcpy(tmp , st);
	for(char * strsb = strtok(tmp , flag) ; strsb ; strsb = strtok(NULL , flag))
		vs.push_back(strsb);
		
	for(auto i : vs){
		std::cout<<i<<" ";
	}
	delete []tmp;
	
	return 0;
} 

输出:123 456 789

注意事项

1、修改原字符串:strtok 会将分隔符替换为 \0,因此原始字符串会被破坏。
所以代码中在堆上new了一块内存,将原始字符串的内容strcpy上去,对堆上的拷贝数据进行操作就行了,然后记得delete释放掉内存

2、不可重入:strtok 使用静态变量保存状态,因此它不是线程安全的。在多线程环境中,请使用 strtok_r。

3、连续分隔符:如果字符串中有连续的分隔符,strtok 会跳过它们,返回下一个有效的子字符串。

你可能感兴趣的:(高效的利用strtok函数对字符串进行分割)