网站首页 > 教程分享 正文
一、一维数组
1、一维数组的介绍
用一段连续空间 存放相同类型的变量 这样的容器(结构)叫数组。
数组的下标是从0开始。
加入数组有n个元素:
下标范围:0~n-1
元素范围:arr[0]~arr[n-1]
2、定义数组
1、定义一个数组 有3个元素 每个元素为int
int Array[3];
2、定义一个数组 有3个元素 每个元素为int *
int *Array[3];
3、定义一个数组 有3个元素 每个元素为函数的入口地址,该函数有两个int型形参,int返回值类型
int (*arr[3])(int, int);
3、数组初始化
如果数组的全部元素初始化,可以省略[]的数值
int arr[] = {12,1,4,5,7};
int部分初始化,未初始化的自动补0
int arr[5] = {12,23,4};
指定下标初始化
int arr[5] ={[2]=12,[4]=11}//0 0 12 0 11
4、数组大小计算
计算数组所占字节
sizeof(arr);
计算数组一个元素所占字节
sizeof(arr[0]);
得到数组元素个数
int n = sizeof(arr)/sizeof(arr[0]);
二、一维字符数组
1、一维字符数组初始化
逐个元素初始化(不推荐)
char arr[5] = {‘h’,’e’,’l’,’l’,’o’};
字符串方式初始化字符数组(推荐)
(编译器会自动在字符串末尾添加‘\0’作为字符串结束标志位)
char arr[6] = “hello”;
2、字符数组遍历
使用for循环遍历(逐个字符操作)
char arr[20] = "hello world";
int n = sizeof(arr)/sizeof(arr[0]);
for(int i=0 ;i<n ;i++)
{
printf(“%c ”,arr[i]);
}
使用%s直接输出字符串,需要字符串的首元素地址,遇到’\0’才结束
char arr[6] = “hello”;
printf(“%s”,arr);
strlen测量字符串的长度(不计算’\0’,遇到’\0’结束长度计算)
printf(“strlen(arr)=%lu\n”,strlen(arr));
3、键盘输入字符数组
(1)scanf获取字符串
scanf和%s获取字符串(遇到空格或回车结束输入)
char str[128] = “”;
printf(“输入字符串”);
scanf(“%s”,str);//不需要加&
printf(“%s\n”,str);
输入 hello world
输出 hello
(2)gets()获取字符串
char str[128] = “”;
printf(“输入字符串”);
gets(str);
printf(“%s\n”,str);
获取带空格的字符串数组fgets()函数(安全)
char *fgets(char *s,int size,FILE *stream);
s:表示空间起始位置
size:表示能获取的最大字节size-1
stream:表示设备
(3)字符串拷贝
#include <stdio.h>
int main(int argc,char *argv[])
{
char arr[128] = “”;
printf(“请输入一个字符串:”);
fgets(arr,sizeof(arr),stdin);//可以获取带空格的字符串,但是会打印回车键
arr[strlen(arr)-1] = 0;//消除回车键 strlen测量字符串长度
int i = 0;
while(arr1[i] !=’\0’)
{
arr2[i] = arr1[i];
i++;
}
arr2[i] = ‘\0’;
printf(“arr1:%s\n”arr1);
printf(“arr2:%s\n”arr2);
return 0;
}
三、二维数组
1、二维数组的介绍
二维数组的总大小 == 行数 * 列数 * 每个元素大小
数组总大小 == sizeof(arr)
行数 == sizeof(srr)/sizeof(arr[0])
列数 == sizeof(arr[0])/sizeof(arr0)
2、数组初始化
分段初始化(完全初始化)可省略行数
int arr[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}}
分段初始化(部分初始化)
int arr[3][4] = {{1,2},{2,5},{3,4},{4,5,6}}
连续初始化(完全初始化)
int arr[3][4] = {1,2,3,4,5,6,7,8,9,0,12,23}
填满一行,进行下一行连续初始化(部分初始化)
int arr[3][4] = {6,7,8,9,0,12,23}
3、数组遍历
#include <stdio.h>
int main(int argc, char const *argv[])
{
int arr[3][3] =
{
{1,2,3},
{4,5,6},
{7,8,9},
};
//外层循环遍历
for(int i = 0;i<3;i++)
{
//打印循环遍历列
for (int j = 0; j < 3; j++)
{
printf("%d ",arr[i][j]);
}
//每行结束换行
printf("\n");
}
return 0;
}
四、数组操作函数
1、字符串拷贝
#include <stdio.h>
void my_strcopy(char *dest,const char *src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
}
int main(int argc, char const *argv[])
{
char src[] = "hello world!";
char dest[128] = "";
my_strcopy(dest,src);
printf("%s\n",dest);
return 0;
}
2、字符串追加
#include <stdio.h>
void my_strcat(char *dest,const char *src)
{
//找到目标字符串的末尾
while (*dest != '\0')
{
dest++;
}
//将源字符串拷贝到目标字符串
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
//在目标字符串末尾添加终止字符
*dest = '\0';
}
int main(int argc, char const *argv[])
{
char dest[128] = "hello ";
char src[128] = "world!";
my_strcat(dest,src);
printf("%s\n",dest);
return 0;
}
3、字符查找
#include <stdio.h>
char *my_strchr(const char *str,char c)
{
while (*str != '\0')
{
//如果找到字符,返回指向该字符的指针
if(*str == c)
{
return (char*)str;
}
str++;
}
//如果没找到字符返回空
return NULL;
}
int main(int argc, char const *argv[])
{
char str[128] = "q,w,e,d,s,c,v,h,y,u";
char c = 'd';
char* result = my_strchr(str,c);
if(result != NULL)
{
printf("%c:%d\n",c,result - str);
}
else
{
printf("%c not found\n",c);
}
return 0;
}
五、案例
1、键盘获取英文字母,输出在26个英文字母的第几位
知识点:
(1)键盘获取字符
(2)输入大写或小写,输出相同的结果
(3)字符比较
(4)若输入多个字符,逐个输出位置
#include <stdio.h>
void my_Array(const char * str)
{
int num = 0;
while (*str != '\0')
{
if(*str>=65 && *str <=90)
{
num = *str-64;
printf("%d ",num);
}
else if(*str>=97 && *str <=122)
{
num = *str-96;
printf("%d ",num);
}
else
{
printf("error\n");
}
str++;
}
}
int main(int argc, char const *argv[])
{
//键盘获取字符
printf("请输入英文字符或字符串:");
char str[128] = "";
scanf("%s",str);
//字符逐个比较
my_Array(str);
return 0;
}
2、键盘获取字符串,将某些字符替换为指定字符,并拷贝到新字符串中
知识点:
(1)键盘获取字符串
(2)字符的查找替换
(3)字符串的拷贝
#include <stdio.h>
void my_str(const char *str,char c,char a)
{
int i = 0;
char array[128] = "";
while (*str != '\0')
{
//如果找到字符,返回指向该字符的指针
if(*str == c)
{
array[i] = a;
}
else
{
array[i] = *str;
}
i++;
str++;
}
printf("%s",array);
}
int main(int argc, char const *argv[])
{
//键盘获取字符
printf("a:");
char str[128] = "";
char c;
char a;
scanf("%s",str);
printf("b:");
scanf(" %c",&c);
printf("c:");
scanf(" %c",&a);
//字符逐个比较拷贝
my_str(str,c,a);
return 0;
}
六、如有错误欢迎指正
关注公众号“小小创客者”分享更多学习笔记
猜你喜欢
- 2024-09-17 c语言 数组(c语言数组定义)
- 2024-09-17 VBA数组与字典解决方案的第17讲:工作表数组大小扩展及意义
- 2024-09-17 Linux编程Shell之入门——Shell获取数组长度
- 2024-09-17 HashMap数组长度为什么是2的n次方
- 2024-09-17 2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums
- 2024-09-17 VBA中动态数组的定义及创建(vba 动态)
- 2024-09-17 C语言数组那些事儿,C语言基础教程之数组
- 2024-09-17 一文看懂PG数据类型之数值类型、字符类型、日期类型、数组类型
- 2024-09-17 2023-12-20:用go语言,给定一个数组arr,长度为n,在其中要选两
- 2024-09-17 「清晰易懂」数据结构与算法之数组
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)