目录
1、一维数组的定义
2、一维数组的初始化
3、选择排序法
4、二维数组
5、二维数值数组的初始化
6、一维字符数组的初始化
4、字符串函数
5、键盘获取字符数组
6、经典高级字符串题型
1、步骤:
1、数组名 和 [] 表示数组
2、将数组的个数 放入[]里面
3、用元素的类型 定义一个变量
4、从上 往下 替换。
(1):定义一个数组 有5个元素 每个元素为int
int arr[5];
(2):定义一个数组 有5个元素 每个元素为int *
int *arr[5];
(3):定义一个数组 有5个元素 每个元素为数组,该数组有10个元素每个元素为int
int arr[5][10];
(4):定义一个数组 有5个元素 每个元素为函数的入口地址,该函数有两个int型形参, int返回值类型
int (*arr[5])(int, int);
2、数组名作为类型
sizeof(arr):数组的总空间大小(数组的总空间大小==元素个数*每个元素空间大小)
sizeof(arr[0])==元素大小
sizeof(arr)/sizeof(arr[0])=元素个数
3、数组不初始化内容为随机数
1、全部元素初始化:int arr[5]={10,20,30,40,50};
如果数组的全部元素都初始化 可以省略[]中的数值,元素个数由初始化的元素个数确定。
2、部分元素初始化:int arr[5]={1,2,3};
3、指定下标初始化:int arr[5]={[2]=2, [4]=4};
#include
main()
{
int arr[10]={0};
int n = sizeof(arr)/sizeof(arr[0]);
printf("请输入%d个int数据:", n);
int i=0;
for(i=0;i arr[j])//从小‐‐‐>大
{
min = j;//纪录最小值的下标
}
}
//判断假设的最小值下标 和 真实的最小值下标是否 相等 如果不相等 交换
if(s != min)
{
int tmp = arr[s];
arr[s] = arr[min];
arr[min] = tmp;
}
}
for(i=0;i
二维数组总大小==行数*列数*每个元素的空间大小
数组的总大小==sizeof(arr)
行数:sizeof(arr)/sizeof(arr[0]);
列数==sizeof(arr[0])/sizeof(arr[0][0]);
1、分段初始化
int arr[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; //完全初始化
int arr[][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; //如果完全初始化 可以省略行标
int arr[3][4]={ {1,2}, {5,6}, {9,10} };//部分初始化
2、连续初始化
int arr[3][4]={ 1,2,3,4, 5,6,7,8, 9,10,11,12}; /完全初始化
int arr[][4]={1,2,3,4, 5,6,7,8, 9,10,11,12};//如果完全初始化 可以省略行标
int arr[3][4]={ 1,2, 5,6, 9,10,11}; //部分初始化
1、逐个元素初始化 char arr[5]={'h','e','l','l','o'};//使用%s输出容易访问非法内存,下标可省。
2、字符串的方式 初始化 一维字符数组 char arr[6]="hello";下标可省。
3、遍历
使用for循环遍历
使用%s直接输出字符串,遇到’\0'才结束。
头文件:#inclde
strlen:测量字符串的长度(不计算‘\0’),只要遇到‘\0’结束长度计算,数据类型为无符号长整型lu
不用strlen求字符串长度:while(str[i]&&++i);
八进制、十六进制、两个反斜杠算一个字符,%单独算一个字符。
1、scanf和%s获取字符串,遇到空格或回车结束输入。
scanf("%s",str);//数组名作为地址,无需&
2、gets获取带空格的字符串,回车结束输入,但不会获取回车。
不会判断目的空间是否足够,容易造成越界。
3、fgets可以获取带空格的字符串,安全。遇到回车和达到空间最大值结束获取,会提取回车。
语法:char *fgets(char *s,int size,FIEL *stream)
s:表示空间的起始位置
size:表示的能获取的最大字节数为size-1
stream:表示设备(stdin标准输入设备(终端))
用例:fgets(str,sizeof(str),stdin);
消除获取到的回车:使用fgets语句后添加str[strlen(str)-1]=0;
1、将str1字符串拷贝到str2中(不使用strcpy)
int i=0;
while(str1[i]!='\0')
{
str2[i]=str[1];
i++
}
2、查找元素并输出下标
i=0;
while(str[i]!='\0')
{
if(str[i]==ch)
{
printf("找到位置为:%d",i);
break;
}
i++;
if(str[i]='\0');
printf("没有找到\n");
3、求将str2字符串插入到字符串str1的pos位置(pos在str1范围内)
//计算str2的长度
int len = 0;
while(str2[len] && ++len);
//将i定位到str1的尾部 i也是str1的长度
int i=0;
while(str1[i] && ++i);
//在str1移动数据 预留足够的位置
while(i>=pos)
{
str1[i+len] = str1[i];
i‐‐;
}
//将str2的字符串 插入到pos位置上
int j=0;
while(str2[j] != '\0')
{
str1[pos] = str2[j];
pos++;
j++;
}