一、字符数组的定义和引用
方法如前面所述(数据类型 数组名【数组元素个数】),字符数组时将所有的数据类型定义为字符型
char s[100];
字符串 :eg; “adt1236428\0” 默认在后加\0,ASCIIA码为0,作用:结束标志,表示该字符串到此结束 字符串常量不可修改
字符数组:存储字符串并且可以通过程序编写对字符串的内容进行修改
字符数组初始化
char s[100] = “Hello”;
可以将s理解为容器,而该容器的容积为100,初始化值应该小于s的容积
char s[3] = "hello"; // 会造成数组的越界访问
遍历字符数组
int main(void)
{
char s[100] = "Hello";
int i = 0;
while(s[i] != '\0')
{
putchar(s[i]);
++i;
}
return 0;
}
puts( ) 函数:(字符串输出) // int puts(const char *s)
可将上述代码改为 : puts(s); (puts函数结尾自动换行)
注意区分:
0 :数字0,int型,4个字节
‘0’ :字符0,char型,1个字节
‘\0’ :字符串的结束标志,空字符,1个字节,ASCII码值为0
“0” :字符串,2个字节
“ ” : 空字符串,1个字节(‘\0’)
gets( ) 函数: (字符串输入)
gets(s); //dangerous(不检测越界)
fgets( )函数: (输入)
fgets(s , sizeof(s) , stdin); //stdin:标准输入设备 (检测越界,会收录\n)
scanf( )函数: (输入)
scanf("%s" , s); //s此时已经为数组s首个元素地址,不用&(不收录\n,不检测越界)
缺点:scanf会自动认为空格、tab和回车键是两个数据中间的分隔符,不会将空格当成有效字符输入
1.计算字符串长度 strlen函数
注意:区分sizeof 和 strlen
sizeof : 数组的总容量
strlen : 数组中存储的有效容量(若已知字符串需要存储但不知字符串长度,需要定义长度至少为strlen + 1的数组来存储该字符串,若不及该长度则会引起数组的越界访问)
2.字符串的拷贝 strcpy函数
注意:①需要调用#include<string.h>
②strcpy 函数使用时strcpy(目的,源);
③目的数组内存应该足够大,长度至少应该为strlens1[ ]+1;
3.字符串的连接 strcat函数
注意:①需要调用#include<string.h>
②strcpy 函数使用时strcpy(目的,源);
③目的数组内存应该足够大,长度至少应该为strlens1[ ]+strlens2[ ]+1;
4.字符串的比较 strcmp函数(int型)
strcmp(s1,s2); 括号内为数组的地址,其数据类型也为int型
若比较值等于0.则两字符串相同; 若比较值大于0,则前者字符串较大 ;反之小于0时字符串更小
该函数为两字符串对应字符两两比较,若相同为字符相同,则应向后位依次进行比较
5.求极值问题
对于字符串进行比较时不能使用关系运算符,只能使用strcmp函数
对字符数组进行赋值时不能使用赋值运算符,只能使用strcpy函数
eg:
练习:字符串逆序