一维字符型数组:
char s[10]; //一维字符型数据
//这个数组是用来放char类型的
要提到的是,计算机存储字符型数据时会以字符串的形式存入。
eg:想存入计算机一个“hello”,实际存在计算机里的字符串最后都带一个“\0"在后面,作为结束的标记。形式上只存了一个“hello”实际上存储的时“hello\0”
通常的利用这个机制 当想要遍历一个字符型数组的时候,可以通过while(s[i]!=‘\0‘)来判断是否将字符串操作完毕
说回字符数组:
1、字符数组的初始化:
可以直接初始化也就是全部初始化,部分初始化,
eg: char s[10] = {1,2,3,4,5,6,7,8,9,10}; //全部初始化
char s[10] = {1,2,3,4,5}; //部分初始化
注意:
还有一种情况是没有初始化,也就是未初始化。未初始化的情况下字符数组里面的都是垃圾值(随机生成)
eg: char s[10] ;
2、给字符数组赋值
//赋值
for(i = 0;i < n;++i) //通过表达式赋值
{
s[i]='a' + i;
}
//通过输入赋值
for(i = 0;i < n;++i) //通过表达式赋值
{
scanf(”%c“,&s[i]); 或者 s[i] = getchar();vi
}
一些常用的字符串操作函数:
gets() 功能:给字符数组中输入一个”字符串“
参数:
s 表示 需要传的是一个字符数组的名字
返回值:
表示 存放字符数组的 那块空间的地址
puts() 功能:将字符串输出,并且他会默认输出一个‘\n’
参数:
可以是数组名 ,也可以是一个字符串常量
返回值:
成功 非负数
失败 -1
puts()这个函数就相当于
while(s[i] != '\0') //当遇到’\0‘的时候字符
{
printf("s[%d]=%c\n",i,s[i]);
i++;
}
要说明的是:gets()这个函数是非常危险的不推荐使用,很容易就会越界,不容易发现
注意!:
数组是用来存储数据的!!!!!!
字符数组主要是存储字符串数据的!!!!!
字符串长度指的是 ‘ \0 ’ 前面字符的个数
eg: ”hello“ 他的字符串长度是5
strlen 计算字符串的长度 使用的时候要加上头文件 #include <string.h>
函数原型: size_t strlen(const char*s);
功能:统计给到的字符串的长度
参数:
s //数组名 或 字符串常量
返回值:
表示字符串的长度
字符串复制:
因为字符数组不能整体赋值
所以eg: char s1[] = "hello";
char s2[] = {};
s2 = s1 ; //在c语言中是不可以的
------------------------------------------------------------------------------------------------
while(s2[i] = s1[i]) //把s1字符数组里的字符赋到s2中
{
++i;
}
strcpy
功能: 将 str中的字符串拷贝到dest中ssd
eg:
char dest[10];
char src[10] = "hello";
strcpy(dest,src);
strcat
功能: 将src中的字符串拼接到dest中
eg:
char dest[100]= "world";
char src[] = "hello";
strcpy(dest,src); //可以这样------src是一个字符数组数组名
strcpy(dest,“hello”) //也可以这样 ------src是一个字符串常量
strcmp
功能: 比较s1和s2字符串的大小 //使用方法strcmp(s1,s2)
返回值: //输出的数字是两个字节的差值。(相减)
>0 s1>s2
<0 s1 <s2
==0 s1 = = s2
strlwr
功能: 把字符串中大写字母换成小写字母
strupr
功能: 把字符串中的小写字母换成大写字母
有趣的一部分是字符串的比较:
字符串比较的规则和其他语言中的规则相同,对两个字符串从左到右依次比较他们的ASCII码值
直到出现不同的字符或者遇到’ \0 ‘为止
若是全部字符相同则认为相等:
若出现不同的字符,则以第一个不相同的字符的比较结果为基准。
----------------------------------------------------------------------------------------
二维数组:
语法:
类型说明符 数组名[常量表达式][常量表达式]
类型说明符 ---表示数组中要存储的数据的类型
数组名 ---起名字符合标示符定义的规则
//数组名所代表的类型 - - -去掉名字之后剩下的就是对应的类型
//数组名所代表的值 -----首元素的地址
[常量表达式] -----两个表示的就是二维数组
[常量表达式]
eg: int a[3]; //一维整型数组
int a[3][4]; //二维整型数组
理解二维数组:
int a[行数][列数]; //定义了一个n行m列的总共 n * m int型变量的数组。
可以理解为一个线性代数的数列
计算机中存储的方式: 线性存储;
二维数组的本质:
可以把a看作是一维数组,他有n个元素,每一个元素都是一个一维数组;n个元素中又存在m个元素。
c语言中,并不存在真正的二维数组,本质上都是一维数组。
//二维数组的使用
int a[3][4] = {1,2,3,4,5,6,7,8,9,1,2,3,4}
int a[3][4] = {{1,2,3,4},{0},{5,6,7,8},{0},{9,1,2,3}} //按行初始化
int a[3][4] = {1,2,3} // 部分初始化
int a[3][4] = {} //未初始化 里面都是垃圾值
for(i=0;i<3;++i) //给二维数组赋值
{
for(j=0;j<4;++j)
{
//a[i][j] = ’a‘; //直接赋值
scanf(“%d”,a[i][j]); //输入赋值
}
//二维数组的输出
for(i=0;i<3;++i)
{
for(j=0;j<4;++j)
{
printf("%d",a[i][j]);
}
putchar('\n'); //每行结束都打印一个换行字符
}
注意:
1、二维数组中,也可以是变长数组
eg: int a[n][n];
2、二维数组中可以省略行数,不可以省略列数
eg: int a[3][4]; //3可以省略,4不可以
int [4] a[]; //本质上省略的还是一维数组的
二维字符型数组: char a[3][4]
char str[5][10]; //5个字符串每个字符串可以10个字符的长度
实际上 str[i] //就表示内部一位数组的数组名
赋值的时候可以使用 gets(str[i]); 加上一个for循环来给这个二维字符型数组来赋值