C++学习笔记6[数组]

C++学习目录链接:
C++学习笔记目录链接(持续更新中)



一、一维数组

1.一维数组的声明

    在程序设计中,将同一数据类型的数据按一定形 式有序地组织起来,这些有序数据的集合就称为数组。一个数组有一个统一的数组名, 可以通过数组名和下标来唯一确定 数组中的元素。一维数组的声明形式如下:

数据类型 数组名 [常量表达式]

int a[10];//声明一个整形数组,包含10个元素
char name[128];//声明一个字符数组,包含128个字符
float price[20];//声明一个浮点型数组,包含20个元素

    使用数组的说明:

  • (1)数组名的命名规则和变量名相同。
  • (2)数组名后面的括号是方括号,方括号内是常量表达式。
  • (3)常量表达式表示元素的个数,即数组的长度。
  • (4)定义数组的常量表达式不能是变量,因为数组的大小不能动态定义。例如:int a[i];//不合法

2.一维数组的引用

    一维数组引用的-般形式如下:
    数组名[下标]

    例如:
int a[10];//声明一个整形数组,包含10个元素
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],是对数组a中10个元素的引用。

    一维 数组引用的说明:
    (1)数组元素的下标起始值为0而不是1。
    (2) a[10]是不存在的数组元素,引用a[10]非法。

3.一维数组的初始化

    数组元素初始化的方式有两种,- 种是对单个元素逐一赋值,另一种是使用聚合方式赋值。
(1)单一数组元素赋值
a[0]=0就是对单一数组元素赋值,也可以通过变量控制下标的方式进行赋值。例如:

#include <iostream>

using namespace std;

void main()
{
char a[3];//声明一个字符数组,包含3个元素
a[0]='a';
a[1]='b';
a[2]='c';
int i=0;
cout<<a[i]<<endl;//打印a[0]
}

(2)聚合方式赋值
数组不仅可以逐一对数组元素赋值,还可以通过大括号进行多个元素的赋值。例如:

char a[3]={'a','b','v'};//声明一个字符数组,包含3个元素

char a[]={'a','b','v'};//声明一个字符数组,编译器能识别元素个数

char a[3]={'a','b'};//声明一个字符数组,包含3个元素,最后一个元素赋值为空,如果是整型数组,则赋值为0
#include <iostream>
using namespace std;
void main()
{
char a[3]={'a','b','v'};//声明一个字符数组,包含3个元素

int i=0;
cout<<a[i]<<endl;//打印a[0]
}

二、二维数组

1.二维数组的声明

    二维数组声明的一般形式为:
数据类型数组名[常量表达式1][常量表达式2]
例如:
int a[3]4];//声明具有3行4列元素的整型数组
float myArray[4][5]; /I声明具有 4行5列元素的浮点型数组

    一维 数组描述的是-一个线性序列,二维数组描述的则是一个矩阵。常量表达式1代表行的数量,常量表达式2代表列的数量。二维数组可以看作是一种特殊的一维数组,如图所示,虛线左侧为3个一维数组的首元素,二维数组是由A[0]、A[1]、A[2]这3个一维数组组成,每个一维数组都包含4个元素。
使用数组的说明:
(1)数组名的命名规则和变量名相同。
(2)二维数组有两个下标,所以要有两个中括号。例如:int a[3,4] //不合法
inta[3:4] //不合法

(3)下标运算符中的整数表达式代表数组每一个维的长度,它们必须是正整数,其乘积确定了整个数组的长度。例如:int a[3][4]其长度就是3X4=12。

(4)定义数组的常量表达式不能是变量,因为数组的大小不能动态定义。例如:
int a[]0]; //不合法

2.二维数组的引用

    二维数组元素的引用形式为:
数组名[下标]下标]
二维数组元素的引用和- -维数组基本相同。例如:
a[2-1[22-1]//合法
a[2,3]a[2-1,2
2-1]//不合法

3.二维数组的初始化

    二维数组元素初始化的方式和一-维 数组相同,也分为单个元素逐一的赋值和使用聚合方式赋值。
例如:

myArray[0][1]=2;//单个元素初始化
int A[2][3]={1,2,3,4,5,6};//使用聚合方式初始化

    二维数组中元素排列的顺序是按行存放,即在内存中先顺序存放第1行的元素,再存放第2行的元素。例如“int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};"的赋值顺序是:
先给第1行元素赋值: a[]0)->@[]1]->a[]2]->a[0][3]。
再给第2行元素赋值: a[1][0]->a[1][1]->a[1][2]->a[1][3]。
最后给第3行元素赋值: a[2][0]->a[2][1]~>a[2][2]->a[2][3]。

    使用聚合方式赋值,还可以按行进行赋值,例如:

int A[2][3]={{1,2,3},{4,5,6}};

    二维数组可以只对前几个元素赋值。例如:

int A[2][3]={1,2,3};//相当于给第一行赋值,其他元素为0

    数组元素是左值,可以出现在表达式中,也可以对数组元素进行计算。例如:

b[1][2]=A[1][2]/3;
/* 将数组行列互换*/
#include <iostream>
#include <iomanip>//输出流控制
using namespace std;

int fun(int array[3][3])
{int i,j,t;
   for(i=0;i<3;i++)
     for(j=0;j<i;j++)
	 {t=array[i][j];
	 array[i][j]=array[j][i];
	 array[j][i]=t;}
     return 0;
}
void main()
{

int i,j;
cout<<"转换前"<<endl;
int A[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(i=0;i<3;i++)
{for(j=0;j<3;j++){cout<<setw(7)<<A[i][j];
}cout<<endl;}

fun(A);
cout<<"转换后"<<endl;
for(i=0;i<3;i++)
{for(j=0;j<3;j++){cout<<setw(7)<<A[i][j];
}cout<<endl;}

}

三、字符数组

    用来存放字符数据的数组是字符数组,字符数组中的一个元素存放-一个字符。字符数组具有数组的共同属性。由于字符串应用广“泛,C和C++专门为它提供了许多方便的用法和函数。

1.字符数组的声明

    char pWord[11];

2.字符数组的赋值方式

    可以对数组元素进行单一赋值

pWord[0]='a';
pWord[1]='b';

    可以对数组元素进聚合赋值

char pWord[11]={'a','b','c','d','e','f','g','h','i','f','j'};

    如果大括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定义为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
聚合方式只能在数组声明时使用。例如:

char pWord[11];
pWord[11]={'a','b','c','d','e','f','g','h','i','f','j'};//错误

    字符数组不能给字符数组赋值

char A[5]={'a','b','c','d','e'};
char b[5];
A=b;//错误
A[0]=b[0];//正确

    字符数组常作字符串使用,作为字符串要有字符串结束符“\0”。。可以使用字符串为字符数组赋值。例如:

char A[]="hello world";
	等于
char A[]="hello world\n";

    字符串结束符“\0”主要告知字符串处理函数字符串已经结束了,不需要再输出了。下面通过实例来看一下使用字符串结束符“\0” 和不使用字符串结束符“\0” 的区别。

/* 未在末尾添加\0*/
#include <iostream>

using namespace std;

void main()
{
	char A[12];
	A[0]='a';
	A[1]='b';
	printf("%s\n",A);
}

/* 在末尾添加\0*/
#include <iostream>

using namespace std;

void main()
{
	char A[12];
	A[0]='a';
	A[1]='b';
	A[2]='\0';
	printf("%s\n",A);
}

3.字符串处理函数

    strcat函数

字符串连接函数strcat的格式如下:
strcat(字符数组1,字符数组2)

    其功能是将字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串结束标志“\0

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	strcat(str1,str2);//字符串拼接
	puts(str1);//打印
	
}

在使用strcat函数时要注意,字符数组1的长度要足够大,否则不能装下连接后的字符串。

    不使用strcat拼接

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	int i=0,j=0;
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	while(str1[i]!='\0')//遍历str1字符串,直到遇到str1中的结束符
		i++;
	while(str2[j]!='\0')//遍历str2字符串,直到遇到结束符标志为止
		str1[i++]=str2[j++];
	    str1[i]='\0';
	puts(str1);//输出str1
	
}

    strcpy函数

字符串复制函数strepy的格式如下:
其功能是将把字符数组2中的字符串复制到字符数组1中。字符串结束志“\0”也一同复制。

说明
①要求字符数组1应有足够的长度,否则不能全部装入所复制的字符串。
②字符数组1必须写成数组名形式,而字符数组2可以是字符数组名,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[12],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	strcpy(str1,str2);//字符串复制
	puts(str1);//打印
	
}

说明
strcpy函数实质上是用字符数组2中的字符串覆盖字符数组1中的内容,而strat函数则不存在覆盖等问题,只是单纯地将字符数组2中的字符串连接到字符数组1中的字符串后面。

    strcmp函数
字符串比较函数strcmp的格式如下:
strcmp(字符数组1,字符数组2)
其功能是按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。如果字符串1=字符串2,返回值为0;如果字符串1>字符串2,返回值为- -正数;如果字符串1<字符串2,返回值为一负数。该函数可用于比较两个字符串常量,或比较数组和字符串常量。例如:

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	int i=0
;	char str1[6],str2[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<"请输入str2字符串"<<endl;
	gets(str2);
	i=strcmp(str1,str2);//字符串比较
	cout<<"i="<<i<<endl;

	
}

    strlen函数

    测字符串长度函数strlen的格式如下:
strlen(字符数组名)
其功能是测字符串的实际长度(不含字符串结束标志“\0”),函数返回值为字符串的实际长度。

#include <iostream>
#include<string>//导入字符串包

using namespace std;

void main()
{
	char str1[6];
	cout<<"请输入str1字符串"<<endl;
	gets(str1);//输入str1
	cout<<strlen(str1)<<endl;	
}

总结

本文讲解了C++中的数组

在这里插入图片描述
作者:电气-余登武

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值