目录
一维字符型数组
语法形式:数据类型 数组名 [常量表达式]
从数组角度看
初始化:从数组角度入手,字符型数组开了一片空间用来存数据,可以往里面存char类型的字符
//初始化时赋入单个的字符
char a[] = {'h','e','l','l','o'};
从字符串角度看
初始化时直接赋入一个字符串,可省略初始化器不写。
char s[] = "hello";
//因为系统会自动在末尾加一个'\0'停止标志,所以这个数组占6个字节,但字符串长度为5
总结
1.C语言中,字符串是通过一维字符型数组来存储
2.字符串中有一个'\0'作为停止标志,只要结束时有'\0'这个字符,都可以认为是字符串。
3.处理字符串时,我们更关心的时停止标志。
4.处理字符型数组时,我们关心的应该是数组的长度
操作字符串的函数
gets
函数原型:char *gets(char *s);
作用:从键盘获得一个字符串并存储到s字符型数组中。
代码展现:
char s[50];
//gets操作
gets(s);
//用基础流程控制完成同样操作
int i;
int ret;
//在没有获取到回车时依次赋值到s数组中
while ((ret = getchar) != '\n')
{
s[i] = ret;
i++;
}
//在数组的最后一个输入的字符后面加上'\0',组成字符串
s[i] = '\0'
puts
函数原型:int puts(const char *s);
作用:输出一个字符串,该字符串为s
代码展示:
char s[20] = "hello";
int ret;
//puts操作
puts(s);
//用流程控制完成相同操作
while ((ret = putchar(s[i])) != '\0')
{
i++;
}
strlen
函数原型:size_t strlen(const char *s);
作用:计算一个字符串的长度
代码展示:
char s[] = "hello";
int i = 0;
int len;
//用strlen操作
len = strlen(s);
//在没有找到'\0'前一直计数,i就是字符串长度
while (s[i] != '\0')
{
i++
}
printf("strlen = %d\n",i);
strcpy
函数原型:char * strcpy(char *dest, const char *src);
作用:将src字符串复制到dest中
代码展示:
char s1[50];
char s2[50];
int i = 0;
gets(s1);
//用strcpy完成复制
strcpy(s2,s1);
//用流程控制完成操作
while (s1[i] != '\0')
{
s2[i] = s1[i];
i++;
}
//在结束处添加停止标志
s2[i] = '\0';
strcat
函数原型:char *strcat(char *dest, const char *src);
作用:将src中的字符串拼接到dest中,变成一个字符串。
代码展示:
char s1[] = "hello";
char s2[] = "world";
int i = 0;
//用strcat完成字符串拼接
strcat(s1,s2);
//找到s1的停止标志的位置
while (s1[i] != '\0')
{
i++;
}
int j = 0;
//将s2中的字符依次复制到s1中
while (s2[j] != '\0')
{
s1[i] = s2[j];
j++;
}
//结束时添加停止标志
s1[i] = '\0';
strcmp
函数原型:int strcmp(const char *s1, const char *s2);
作用:比较s1和s2字符串哪个字符串更大
补充说明(字符串比较规则):即对两个字符串自左至右逐个字符相比(按 ASCII 码值大小比较),直到出现不同的字符或遇到'\0' 为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第1个不相同的字符的比较结果为准。 就是先找出不同之处,然后比较不同的字符谁大;如果前面没不同,直接找到一个字符串的最后,然后与另一个字符串的同位字符与空字符比。
代码展示:
char s1[] = "hello";
char s2[] = "hell";
int i = 0;
//用strcmp实现
strcmp(s1,s2);
//找出不同的位置或者找到任一一个字符串末尾
while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
{
i++;
}
//比较当前位置的值
if (s1[i] > s2[i])
{
printf("s1 > s2\n");
}
else if (s1[i] < s2[i])
{
printf("s1 < s2\n");
}
else
{
printf("s1 == s2\n");
}
二维数组
语法形式:类型说明符 数组名[常量表达式][常量表达式];
初始化:如一维数组相同的是可以全部初始化,也可以部分初始化,不同的是可以按行初始化,用{}隔开。
本质:二维数组在内存中还是线性的,没有所谓的真正的二维数组,只是将一位数组的内存扩大作为一个元素存到一个数组中,本质上是一维数组的一维数组。
赋值:
int a[3][4];
int i,j;
for (i = 0;i < 3;i++)
{
for (j = 0;j < 4;j++)
{
scanf("%d",&a[i][j]);
}
}