打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++ split,字符串分割
进入主题,在c++里,想要分割字符串真的很恶心。要是在java里面,一句str.split(“,”,-1);就解决的事情,在C++里面,就非常纠结。。string里面没有split方法。
于是在网上找啊找,找到了一个诡异的strtok函数,,非常诡异啊。。
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
之前这个strtok (str," ,.-");还容易理解,到了后面,就来了一个NULL参数的strtok,我无比郁闷啊。。
原来他用的是一个全局变量,来指示当前已经处理的字符串起始位置,因此,这个函数不是线程安全的(thread_safe),如果在多线程中用这个函数,可能就会出现问题。
幸亏有个与之对应的多线程版本,叫做strtok_r(),他仅仅是在之前那个函数的基础上增加了一个参数,直接贴代码吧。。
void split(const char * str,const char * deli, vector<string> *list)
{
char buff[1024];
snprintf(buff,sizeof(buff),str);
char * gg;
char *p = strtok_r(buff, deli, &gg);
list->clear();
while(p !=NULL)
{
list->push_back(p);
p = strtok_r(NULL, deli, &gg);
};
}
这个封装的函数可以实现将一个字符串切分,并且不改变之前的字符串,切分后的字符串通过用户传入的vector<string>参数获得,这个函数木有内存泄露的问题,也是线程安全的,放心使用吧。。
如果确定被切分的字符串不是很长,可以适当减小buff的大小,这样应该可以提高一些效率~
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux项目实战系列之:GPS数据解析
字符串函数
C语言的字符串分割
字符串函数之Strtok()函数
strtok函数的使用
[示例详解]C++常用字符串处理函数及使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服