前言
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是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中。