C语言些许回顾:
- C99允许
常变量
,如const int a =3
,常变量具有变量属性:有类型,占存储单元,只是不允许改变其值,即有名字的不变量
,而常量是没有名字的不变量 - 符号常量用#define指令,在预编译是仅进行字符替换,预编译后,符号常量就不存在了(如#define Pi 3.14;Pi全置换为3.14),
对符号常量的名字是不分配内存的。
- 字符型数据以整型形式(ASCII码)存放,也可以用整型数组存放,占1个字节(8位,字节首位置为0)
- C系统在用字符数组存放
字符串常量
时自动加一个'\0'
作为结束符。
a.char c1[] ={"I am happy"};//同char c[] ="I am happy";
b.char c2[] = {'I',' ','a','m',' ','h','a','p','p','y','\0'};
c.char c3[] = {'I',' ','a','m',' ','h','a','p','p','y'};
d.char c4[10] = "China";
系统自动在字符串常量后加’\0’,所以上述代码:
- a、b
等价
,长度为11 - c长度为10
- d长度为
10
(静态内存分配),前5个元素存放单个字符,第6个元素存放’\0’,
后4个自动设为空(null)字符,以'\0'表示
为了使处理方法一致,便于测定字符串实际长度以及相关处理,在字符数组中常常人为加入一个’\0’。代码相关案例 字符串末尾加'\0'作用
:若使用新字符串代替旧字符串,c1 再输入’HE’,不加’\0‘,存放为H E a m 空格字符 h a p p y \0
,输出:HEam happy
;
加’\0’,存放:H E \0 m 空格字符 h a p p y \0
,输出:HE
- c语言中printf(“%s”,c4);,只输出有效字符“China”,遇到’\0‘结束输出,而不是输出
10
个字符。 - c语言中使用scanf输入多个字符串时,以空格分开。
char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
输入: How are you?
以空格字符分隔,作为3个字符串输入,存储状况如下:
str1:H o w \0 \0
str2:a r e \0 \0
str3:y o u ? \0
若改为char str[13]; scanf("%s",str)
;系统以空格字符为分隔符,所以只存放字符串“How”,然后在其后加“\0”
即H o w \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
7.C语言字符串处理函数,#include<string.h>
puts(字符数组)
可输出一个
字符串中包含转义字符,如:
输入:
char str[] = "China\nBeijing";
puts(str);
输出:
China
Beijing
puts输出时将’\0’转换成’\n’,即输出完字符串后换行。
-
gets(字符数组)
获取终端一个字符串到字符数组 -
strcat(字符数组1,字符数组2)
将字符串2接到字符串1的后面,结果放在字符数组1中,返回字符数组1的地址。 -
strcpy(str1,str2/字符串常量)
如:strcpy(str1,“China“);取代str1中前6
个字符(如果str1未初始化或赋值,第6字符(为’\0’)后面的字符是str1原有的字符)。
strncpy(str1,str2,n)
n为控制复制字符的个数 -
strcmp(字符串1,字符串2)
自左向右逐个比较(按ascii码值大小比较,直到出现不同字符或’\0‘为止) -
strlen(字符数组)
返回字符串实际长度
(不包括'\0'
)
建议: 获得字符串的长度,推荐使用 strlen
sizeof 返回获取的数据类型在内存中所占用的存储空间大小
char arr[10] = “abcde”; cout<<sizeof(arr)<<endl;
//sizeof输出10 静态分配给数组的内存空间的大小
//strlen输出5 字符串实际长度
代码相关案例
- strlwr(字符串)将大写字母转小写
- strupr(字符串)将小写字母转大写