Bootstrap

C++零基础自学-第四课 数组与字符串

往期教学

第一课 C++的基本语法

第二课 变量与常量

第三课 分支与循环

前言

我的洛谷

我的洛谷团队

正文

数组

什么是数组

数组是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组

什么是一维数组

一维数组,是由数字组成的以单纯的排序结构排列的结构单一的数组,是计算机中最基本的数组。当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。数组是计算机编程中的重要概念,运用数组可以方便地处理大规模的数据

什么是二维数组

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”

此外,还有其他数组如多维数组等等,因其不常用,故在此不作详解

在C++中定义一维数组

数据类型 数组名[长度]={元素1,元素2,元素3,......元素n};

在C++中定义二维数组

数据类型 数组名[行长度][列长度]={元素1,元素2,元素3
                               元素4,元素5,元素6
                               ......
                                             元素n};

注:二维数组同样可以和一维数组一样初始化,但二维数组普遍不手动初始化,而是双层循环输入数组内的元素

在C++中使用一维数组

Code
#include<iostream>
using namespace std;
int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9};
    cout<<arr[0]<<endl;
    cout<<arr[5]<<endl;
    cout<<arr[8]<<endl;
    return 0;
}
运行结果
1
6
9

从运行结果中,我们可以清晰的了解到,数组的下标正常是从0开始的,不过你也可以通过手动输入元素来改变数组的起始位置

注意:在开数组空间时,假定数组里有n个数,我们最好要开n+1的数组空间,这样能够有效地防止数据溢出的情况

在C++中手动输入一维数组中的元素

Code
#include<iostream>
using namespace std;
int main()
{
    int arr[10]={};
    for(int i=1;i<=9;i++)
    {
        cin>>arr[i];
    }
    cout<<arr[1]<<endl;
    cout<<arr[6]<<endl;
    cout<<arr[9]<<endl;
    return 0;
}
运行结果
1 2 3 4 5 6 7 8 9
1
6
9

可以看到,在这段代码中我们成功修改了数组的起始位置

在C++中使用二维数组

注:由于直接在程序内初始化二维数组的情况较少,所以在此不作详解

Code
#include<iostream>
using namespace std;
int main()
{
    int arr[10][10]={};
    int len=9;
    for(int i=1;i<=3;i++)
    {
    	for(int j=1;j<=3;j++)
    	{
    		cin>>arr[i][j];
		}
    }
    cout<<arr[1][1]<<endl;
    cout<<arr[2][3]<<endl;
    cout<<arr[3][3]<<endl;
    return 0;
}
运行结果
1 2 3
4 5 6
7 8 9
1
6
9

一般情况下,我们无论是在预估一维数组还是二维数组的空间时,都要把空间留得足够大,避免题目上出现极端数据

在程序中,第一个中括号内存放的是元素的行下标,第二个中括号中存放的是元素的列下标,两者切不可混淆

字符串

字符串是什么

‌字符串是编程中用于表示文本或字符序列的数据类型,在计算机科学中是非常常见的数据类型,它们被广泛应用于各种场景,如文本处理,数据解析,网络通信等

在C++中定义字符串

方法一:char数组
Code
#include<iostream>
using namespace std;
int main()
{
    char c[101]="Hello,World!";
    int len=sizeof(c);
    for(int i=0;i<len;i++)
    {
    	cout<<c[i];
	}
	cout<<endl;
    return 0;
}
运行结果
Hello,World!

可以看到,在没有输入数据的情况下,char数组和普通一维数组一样,下标都是从0开始,同样的,我们也可以通过手动输入来改变这一点,在此不另作演示

注:这里的sizeof是内置函数,用来求出字符数组c的长度(其实是字节数,但由于每个char变量占用1byte的内存空间,所以就相当于求字符数组的长度)

方法2:string

这个方法有一点要注意:加上头文件<string><cstring><string.h>三者中的任一头文件,在之前的教学中我也强调过

Code
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    string s="Hello,World!";
	cout<<s<<endl;
    return 0;
}
运行结果
Hello,World!

不难看出,这个方法更加简单,省去了求长度的步骤,直接将字符串s作为一个整体输出,省去了很多麻烦

补充:string求长度:变量名.size()(需要加头文件cstring)

在C++中手动输入string类的字符串

Code
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    string s;
    cin>>s;
	cout<<s<<endl;
    return 0;
}
运行结果
Hello,World!
Hello,World!

可以看到,string类的字符串要比char数组简洁不少,在大多数情况下,两者可以相互转换,但在特殊情况下,就只能用string类字符串了

后记

本人创作不易,后续有时间的时候我将第一时间更新,不知可否要到您的一个赞和关注,感激不尽!

;