字符串操作——靠字符串分割字符串

/*
 * 字符串分解函数。注意strtok比较复杂。要妥善运用!
 * 也可以不用strtok函数,但要实现字符串靠字符串分割比较困难!
 * 注意str指向的空间必须是可读可写的(如数组或动态分配的空间),
 * 不能为字符串常量的指针,因为strtok改变了其中的内容。
 */


#include <stdio.h>
#include <string.h>

/*
 * 功能:将str中的字符串按照elemone,elemtwo分割,
 * 注意分隔符的顺序从后至前,原因在strtok上
 * strtok会改变str中的数据!
 * 然后将elemone前面的字符串再按elemtwo分割,
 * 将分割后结果分别存放到相应字符数组中。
 * 使用n防止缓冲区溢出
 */
void 
str_strip(char *str, char *elemone, char *elemtwo, 
				char *bufstart, char *bufmid, char *bufend, int n)
{
	char *buf;
	buf =  strtok(str, elemone); //buf中保存12-17, str中也保存的是12-17了
	//printf("1. Now buf: %s, str:%s\n", buf, str);
	strncpy(bufend, str = strtok(NULL, elemone), n); //bufend中保存了2
	//str = 没有太多作用,主要是这个字符串会改变str中的字符,这样写以后str中的值是elemone后面的字符串,比较符合逻辑
	
	//printf("2. Now buf: %s, str:%s\n", buf, str);
	
	strncpy(bufstart, strtok(buf, elemtwo), n); //bufstart中保存了12
	//printf("3. Now buf: %s\n", buf);
	strncpy(bufmid, strtok(NULL, elemtwo), n); //bufend中保存了17
	//printf("4. Now buf: %s\n", buf);
	/*综合上述:strtok的功能:以arg 2为分隔符,
	                          第一次取出前半部分,返回前半部分字符的地址,并将分隔符写'\0'即ASCII码0;
	                          第二次取出后半部分,返回后半部分开始字符的地址。
							  第二次必须传入NULL,否则无法取出后面部分,因为此时str已经是被分割后的前半部分字符串了*/ 
}

int main(void)
{
	char str[] = "12-17/2";
	char *elemone = "/";
	char *elemtwo = "-";
	char bufstart[3], bufmid[3], bufend[3]; 

	printf("String:%s ", str);
	str_strip(str, "/", "-", bufstart, bufmid, bufend, 3);
			
	printf("is strop to: %s %s %s\n", bufstart, bufmid, bufend);
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值