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

文章目录

  • 前言
  • 一、字符分割函数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 
#include 
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;
	
}

一个案例让你学会使用字符分割函数strtok()_第1张图片

总结

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

你可能感兴趣的:(c语言大杂烩,c++,c语言,算法)