一个案例让你学会使用字符分割函数strtok()


前言

C语言中是没有字符串类型的,所以采用字符数组对字符串进行处理。
一个字符数组的字符构成一个字符串。
由于字符串隐含有’\0’结尾字符,所以字符数组的长度至少应比存放的字符串长度大一,否者发生数组越界错误。 所以处理字符串最好的方式为字符指针
例如: char *p=“abc”;
p只是个字符指针,占4个字节
这个字符指针指向一个字符串的起始地址。

注意:指向的字符串的指针和字符串本身是分开的两个部分。
字符指针永远永远都是指向一个字符,不可能指向字符串的,字符指针p存放着abc字符串的第一个元素’a’的地址


一、字符分割函数strtok()

strtok()函数,将字符串分解为一组字符串
声明:
char *strtok(char *str, const char *delim);
头文件:#include <string.h>
参数:  

	str:      分割之前的字符串  
	delim:    用于分割的字符串**指针**,即**分割符号**。如:空格" "、 逗号","等   
	
返回值:  
	成功:返回指向被分割出片段的指针  
	**NULL**:没有可被分割的字符串

 1. 在第一调用的时候,strtok(),必须给予参数str字符串
 2. 在以后的调用中则将str设置成null,每次调用成功则返回指向**被分割出片段的**指针
 3. 经常使用**while**循环来实现自动分割

二、分割单词小案例

案例:
输入一行字符串,输出字符串单词的个数
例如:“hello the world”
输出:3

#include <stdio.h>
#include <string.h>
int main()
{
	
	int count=0;//用于计数
	char str[1000]="\0";//初始化一个字符数组,用于存放输入的字符串。可设置大一点,防止越界。
	//当我们声明一个字符串数组的时候,常常需要把它初始化为空串。
	char *token=NULL;//定义一个字符指针,用来存放strtok()返回值
	char s[2]=" ";//设置分隔符
	printf("输入一行字符:\n");
	gets(str);//可以接收空格。区别于scanf()
	//以输入带有空格的字符串。以回车符作为字符串的终止符,同时将回车符从输入缓冲区读走,但不作为字符串的一部分。
	token=strtok(str,s);
	while(token!=NULL)//使用while循环实现自动分割
	{
		count++;
	//	puts(token);//效果和printf()一样
		printf("%s\n",token);
		token=strtok(NULL,s);//以后再次调用,str参数设置null
	}
	printf("一共有%d个单词\n",count);
	return 0;
	
}

在这里插入图片描述

总结

提示:需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值