目录
使用场景
:c语言没有字符串类型,也无法定义字符串变量,只能通过字符型数组,每个元素存放一个字符,最终存放字符串
字符型数组定义:
数据类型 数组名 [元素个数]
char str [20] ;
注意:元素个数必须是常量或者常量表达式
元素个数必须能够容纳下所有字符,包括\0
字符型数组和字符串的区别:字符型数组可以存放字符,不一定包含\0,字符串末尾必须要有\0
字符串以\0来结尾,但是还是不会丢掉后面的\0
初始化
初始化不能与赋值
全部初始化:char str [6] = {'a','d','r','r','e','\0'};
char str [6] = {"heelo"};
char str [6] = "heelo";
局部初始化: char str [6] = {'r','e','\0'}; 没有给定初值的元素,值为0(\0)
char str [6] = {"hee"};
char str [6] = "hee";
char str [6] = {0};是清零 char str [6] = "0";不是是清零
默认初始化:char str [] = {'a','d','r','r','e','\0'};
char str [] = {"heelo"};
char str [] = "heelo";
数组储存
字符型数组所占字节 = 元素个数
连续性储存
打印
printf("%c",a[n]);打印单个字符
printf("%s",a);打印一串字符 一直到\0,没有\0就会越界找,程序就会有崩溃的风险
puts(a)
注意:打印字符串会打印到最近的一个\0就会结束打印
scsanf("%s",a); 只有%c可以接收空格,有空格要用
gets(a);接收带空格的字符串
确保字符串末尾由\0
字符型数组常见函数
strlen:获得字符串的长度(从字符串开头到最近的\0中间元素的个数,不包含\0)
scanf:获得所占内存大小,包括\0
常见操作
strcpy:字符串拷贝
拷贝字符串,不太安全
strcpy(目的空间,拷贝数据);
目的空间一定要比拷贝数据大,要不然就会内存越界
strcat(str1,str2)字符串拼接
:将str2拼接到str1的末尾
strcmp:字符串比较
字符串的比较,如果两个字符串相同,结果为零
如果第一个字符串>第二个字符串 ,结果为>0的值
如果第一个字符串<第二个字符串 ,结果为<0的值
两个字符串比较,从左到右每个字符进行比较,不同的字符,谁的ASCII码值大,字符串就大
strtok字符串分割
strtok(str,“ a”),将字符串str通过字符串中的a给切割,原理是将a变成\0以完成字符串切割。
只能切字符串变量(数组中的字符串),内存常量不能切割。
strtok(NULL,“ a”)将剩余的字符串继续切割,到最后一个单词后没有a的时候就会将最后一个单词的首地址返回,
注意:
上述参数常量和变量都可以
strstr
strstr()
函数用于在一个字符串中查找另一个字符串第一次出现的位置。以下是该函数的原型:
char *strstr(const char *haystack, const char *needle);
这个函数在 haystack
字符串中查找 needle
字符串的第一次出现,并返回指向第一次出现位置的指针。如果 needle
字符串在 haystack
中不存在,则返回 NULL。
以下是一个简单的示例:
#include <stdio.h>
#include <string.h>
int main() {
const char *haystack = "Hello, world! This is a test string.";
const char *needle = "world";
// 使用 strstr() 查找 needle 在 haystack 中的位置
char *result = strstr(haystack, needle);
if (result != NULL) {
printf("'%s' is found at position: %ld\n", needle, result - haystack);
} else {
printf("'%s' is not found in '%s'\n", needle, haystack);
}
return 0;
}
在这个示例中,我们定义了两个字符串 haystack
和 needle
。然后,我们使用 strstr()
函数在 haystack
中查找 needle
字符串的位置。如果找到了,我们输出 needle
字符串在 haystack
中的位置;否则,输出 needle
字符串未找到。
输出将是:
arduinoCopy code
'world' is found at position: 7
这表明 "world"
字符串在 "Hello, world! This is a test string."
中的位置是从索引 7 开始的。
二维字符型数组
定义:数据类型 数组名 [行数][列数];
char str [5] [32]
存储:和二维数组类似
连续性,有序性
初始化:一般是局部初始化,和二维数组类似
二位字符型数组也可以看作是由两个以为字符型数组构成的