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,22-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++中的数组
作者:电气-余登武