字符串分割

字符串分割一种时常会遇到的问题:下面列举几个函数 ,可以方便编程:

1.strtok函数进行字符串分割    ( 适合用于一次性分割 ,这个用得比较多)
原型: char *strtok(char *str, const char *delim);
功能:分解字符串为一组字符串。
参数说明:str为要分解的字符串,delim为分隔符字符串。
返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
例:
char ch[100]="zhangsan 20 male,lisi 20 male,xiaohong 19 female.";
	char *c=ch;
	int tot=0;
    char *str[20];
	while( (str[tot]=strtok(c,",."))!=NULL){
		puts(str[tot++]);
		c=NULL;
	}

2:char *strtok_r(char *s, const char *delim, char **ptrptr);  (  适合一次性分割后还要二次分割等)(这个貌似在windows下米有,不过在linux内核中能找到源码 )

        首先它和strtok区别是 :strtok 自己内置了一个指针,而且因为只有一个 先分割了外层的字符串,再分割内层时就会将外层的指针用于内层,而strtok_r  可以让用户自己提供一个指针代替内置指针, 因此:我们可以为外层先设置一个外层指针 再为内层设置一个内层指针,这样就完美的避免冲突了。


3:char *strtok_s( char *strToken, const char *strDelimit, char **context);  (和2一样吧 这个是用于windows的,和2一样都是线程安全~~~)

例:

char buffer[]="zhangsan 20 male,lisi 20 male,xiaohong 19 female.",*buf=buffer;
	char *str[20];
	
	int tot=0;
	char *outer_ptr=NULL;
	char *inner_ptr=NULL;


	while((str[tot]=strtok_s(buf,",.",&outer_ptr))!=NULL) {
		buf=str[tot];
		while((str[tot]=strtok_s(buf," ",&inner_ptr))!=NULL) {
			tot++;
			buf=NULL;
		}
		str[tot++]="***";  //这一句用来表示 外层分割
		buf=NULL; 
	}



4:  char *strsep(char **stringp, const char *delim); (windows下没有支持,在linux下使用,比strtok速度更快)

    功能:分解字符串为一组字符串。从stringp指向的位置起向后扫描,遇到delim指向位置的字符后,将此字符替换为NULL,返回stringp指向的地址。


5:STL进行字符串的分割

    可以用find 配合substr  不过复杂度高不建议用


6:用Boost进行字符串的分割 需要安装boost库
   利用boost正则表达式分割

1和3用得比较多,其他有兴趣的可以在网上找找资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值