C++编程基础 5. 数组和字符串
2025-04-12 07:28:06
本系列文章是配合我发布的《C++编程基础》系列视频教程的知识点总结和补充。这一节我们讲讲数组和字符串。
数组是用来顺序存放相同类型数据的集合,根据实际需要,如果集合存放固定数量的数据,使用静态数组即可,如果集合中数据的数量不确定,则应选择用动态数组来进行存储。 ### 静态数组
静态数组一旦声明,它的长度就是固定的,所以称它是静态的。
声明数组时,类似于声明变量时的格式,只是在数组名后面多了一对中括号[ ]
,其中包含数组的长度,可以是一个整型常量(注意,是在声明时,在调用数组中的值或为数组中某一项进行赋值时,中括号[]
中的值是该项对应的索引值,数组中第一项的索引值为0)。
[6]={23,43,98,93,87,24}; int scores
或
const int LENGTH=6;
int scores[LENGTH]={23,43,98,93,87,24};
如果声明数组时每个数组项的初始值已经给出,可以省略中括号中的长度值,如:
int scores[]={23,43,98,93,87,24};
声明一个整数型的静态数组时,如果不对数组初始化每一项的值,未被初始化的项值默认为0。
声明一个长度为8的整数型数组,默认初始化所有数组项值为0:
int zeros[8]={};
初始化前两个数组项的值,其余默认为0:
int partial[7]={23,89};
声明一个字符型数组:
char word[]={'B','l','u','e'};
或
char hello[]="Hello";
打印字符型数组的值:
<<"word[]:"<<word<<endl;
cout<<"hello[]:"<<hello<<endl; cout
输出结果:
word[]:Blue
hello[]:Hello
改变字符数组中某一项的值,单字符要用单引号括起,如:
[0]='C'; word
输出结果:
word[]:Clue
对字符数组进行赋值不能直接用 word=“new word”; 这样的语句,而需要用strcpy函数:
(word, "Warrior"); strcpy
使用函数strlen(数组名)可以得到数组的长度:
<<"word[]:"<<word<<endl;
cout<<"the size of array word:"<<strlen(word)<<endl; cout
这样赋了新值后打印出来的结果为(在不同机子上可能会得出不同的结果):
word[]:Warrior
the size of array word:7
请注意这里虽然显示数组word的长度发生了变化,但不能确定它在其他环境下仍能得出如下结果,这样使用可能会增加程序的不确定性而影响运行,因此应该避免可能造成溢出的风险,还是应该以静态数组的长度不能更改为准则。
以上是一维数组,还可以有多维数组,例如二维数组,可以把它理解为有行有列的一张表,数值所在的行数和列数定了,数值就定位了。
声明一个3行2列的二维整数型数组:
[3][2]={{23,45},{78,89},{43,98}}; intclass_scores
为数组中的某一项赋值:
[4]=33;
partial[1][1]=37; class_scores
动态数组
如果数组的长度会发生变化,则应考虑使用动态数组vector存储数据。使用vector类中的函数前,要先在程序头部添加包含该类的预处理指令。
#include <vector>
另外,还要声明使用命名空间std中的vector。
using std::vector;
声明长度为2的整数型动态数组:
<**int**> dynamicArr(2); vector
为动态数组赋值:
[0] = 12;
dynamicArr[1] = 9; dynamicArr
在该数组尾部添加一个值为31的新数组项:
.push_back(31); dynamicArr
打印数组中某项的值:
<<dynamicArr[0] <<endl;
cout<<dynamicArr[1] <<endl; cout
以及打印最后一位数组项的值:
<<dynamicArr[dynamicArr.size()-1] <<endl; cout
输出结果:
12
9
31
字符串 string
使用字符数组的方式描述字符串非常麻烦,因此推荐使用string这个类来存储字符串类型的数据。
使用string类中的函数前,要先在程序头部添加包含该类的预处理指令。
#include <string>
另外,还要声明使用命名空间std中的string。
using std::string;
string可被视为一个动态的数据类型,它的长度可以变化,因此使用起来也更加方便,字符串的值要用双引号来括起,在编写代码时,键入双引号、单引号、分号时要特别注意不要用中文输入法来进行输入,计算机处理时会认为它们并不同于英文输入法下的对应字符。
="Nini";
string strName="Li"; string strSurname
可以直接使用等号=进行赋值,而不需要借助strcpy()函数。
="Lee"; strSurname
可以直接使用加号+将两个或更多的字符串相连:
<<strName+" "+strSurname<<endl; cout
输出结果: Nini Lee
可以用string类中的函数append()将两个字符串相连接,新的字符串将赋给调用这个函数的字符串变量。
.append(strSurname);
strName<<strName<<endl; cout
输出结果: NiniLee