目录
1.字符数组的定义
字符数组是特殊的整数有序集合
每一个整数占用一个字节(范围为:-128 — 127)
- 可以用字符字面量对数组元素进行初始化或者赋值
- 字符数组常常用来存储可阅读的文本信息
2.字符数组的初始化示例:
字符数组的初始化一般有以下两种格式:
- char 字符数组名称[长度] = “字符串值”;
- char 字符数组名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
1.
char c [] = "abc\0de”;
2.
char a [] = {97 , 98 , 99 };
char b [] = {'T' , '.' , 'D' , '.' };
二、字符串
1.C语言中的无奈事实
C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。
- 没有专用的字符串类型(字符串:双引号括起来的有序字符集)
- 只能通过字符数组“模拟”字符串变量
- 存在字符串字面量,但仅能用于常量使用
例如:
#define DT "D.T."
printf("%s\n", DT);
printf("%s\n", "Software");
2.字符串中的0元素
- 整数0即字符串中的0元素(char 是最小的整型)
- 0元素对应的字符是‘\0’(转义字符)
- ‘ 0 ’ 与 ‘ \0 ’不同,‘ 0 ’表示的是一个非0值,对应的整数是48
示例:
int main()
{
printf("%d\n", '\0'); //输出0
printf("%d\n", '0'); //输出48
return 0;
}
3.“字符串变量” — 字符数组
- C语言中通过字符数组定义字符串
- 当字符数组存在0元素时,可当作字符串使用
- 字符数组中的0元素表示了一个字符串的结束
- 字符数组中的元素,不一定是字符串中的元素 如char a [] = "abc\0de" 的字符串元素为 “abc”
注意:
- 可以使用字符串常量进行初始化
- 字符串长度 小于 字符数组大小
- 一个字符数组不一定是一个字符串
- 而一个字符串一定是一个字符数组
4.字符串工具包—string.h
“字符串变量”是否存在运算操作
不存在,C语言中没有专门的字符串类型,也没有针对字符串的专门运输操作!
如:
int a = 1;
int b = 2;
char c[] = "abcd";
char d[] = "efg";
a + b; //等于3
✖c + d; 无法对数组进行加法运算,这是错误的写法
但C语言中有专门的工具包来对字符串进行相关的运算操作,即:string.h
字符串函数
常用的字符串函数如下(strlen,strcmp,strcpy,strcat,atoi):
- strlen(s)→ 获取字符串的长度
- strcpy(s1,s2)→将s2 中的字符复制到s1,s1← s2
- strcat(s1,s2)→将s2追加到s1后面,s1←s1+s2
- strcmp(s1,s2)→ 比较 s1 和 s2 是否相等,相等时为0
(1)strlen()函数
strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。比如:
char str1[]=“慕课网”;
char str2[] ={'i','m','o','o'"\e'}; 运行结果如下
printf("字符串str1长度=%d\n",strlen(str1)); 字符串str1长度=9
printf("字符串str2长度=%d\n",strlen(str2)); 字符串str2长度=5
(2)strcmp()函数
strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小,例如:
char str1[] = "a";
char str2[] = "b";
char str3[] = "a"; 运行结果如下:
printf("a的ASCII码是%d\n", ' a '); str1的ASCII码是4195992
printf("b的ASCII码是%d\n", ' b '); str2的ASCII码是4196016
printf("str1与str2比较结果为%d\n", strcmp(str1,str2)); str1与str2比较结果为-1
printf("str2与str1比较结果为%d\n", strcmp(str2,str1)); str2与str1比较结果为1
printf("str1与str3比较结果为%d\n", strcmp(str1,str3)); str1与str3比较结果为0
(3)strcpy()函数
strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝,比如:
#include <stdio.h>
#include<string.h>
#define PI "imooc"
int main()
{
char str[]="慕课网";
strcpy(str,"I love imooc");
printf("%s\n", str);
/*如果加了一下代码,程序就没有运行结果
strcpy(PI,"I love imooc");
printf(“%s\n",PI);
*/
return 0;
}
该运行结果为
I love imooc
(4)strcat()函数
strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串,比如:
char s1 [10] = "Holle ";
char s2 [] = "World";
strcat(s1, s2);
printf("%s\n", s1);
该运行结果为
Holle World