一、创建和使用数组
数组是一种数据格式,能够存储多个相同类型的值。
数组声明应该注意三点:
- 存储在每个元素中的值类型;
- 数组名;
- 数组的元素数;
格式:
typeName arrayName[arraysSize];
//typeName类型
//arraysSize:指定元素数目,必须是整型常量或const值,也可以为表达式:sizeof(int)。
//arrayName指数组名
例:创建名为months
的数组,数组有12
元素,每个元素可以存储int
类型的值:
int months[12];
1.复合类型数组
数组之所以被称为复合类型,是因为它是使用其他类型创建的。不能仅仅将某种东西声明数组,它必须是指定类型的,没有通用的数组类型,但存在很多特定的数组类型。
如:
float months[20];
-
months
的类型不是“数组”,而是float 数组
,强调了months数组是使用flaot类型创建的。 -
C++数组是从
0
开始编号的(没有商量的)必须从0开始。经常使用带索引的方括号表示指定数组元素,如months[0]
是months数组第一个元素。
下面程序说明数组一些属性,包括声明数组,赋值,初始化;
#include <iostream>
using namespace std;
int main()
{
int yams[3];
yams[0]=7;
yams[1]=8;
yams[2]=6;
int yamcosts[3]={
20,30,5};
cout<<"Total yams=";
cout<<yams[0]+yams[1]+yams[2]<<endl;
cout<<"The package with"<<yams[1]<<"yams const";
cout<<yamcosts[1]<<"cents per yam.\n";
int total=yams[0]*yamcosts[0]+yams[1]*yamcosts[1];
total=total+yams[2]*yamcosts[2];
cout<<"The total yam expense is"<<total<<"cents.\n";
cout<<"\nSize of yams array ="<<sizeof yams;
cout<<"bytes.\n";
cout<<"Size of one element="<<sizeof yams[0];
cout<<"bytes.\n";
return 0;
}
2.数组初始化
有关初始化数组的规则:
①、只有在定义时才能完成初始化,此后不能使用了,也不能将一个数组赋值给另一个数组:
int a[4]={
2,4,5,7};//ok
int x[4];//ok
x[4]={
1,3,7,9};//no
x=a;//no
②、可以使用下标分别给数组的元素赋值。
初始化数组时,提供的值可以少于数组的元素数目。如:
float arr[5]={
5.0,2.5};
-
若只对数组一部分进行初始化,则编译器将其他元素设置为0。
-
初始化
{1}
而不是{0}
,则第一个元素被设置为1,其中都为0。
//若初始化数组内方括号为空,c++将计算元素个数。
int things[] = {
1,5,3,6};
//数组包含4个元素。
③.编译器计算元素个数
short things[] = {
1,5,3,8};
int num = sizeof things / sizeof(short);
3.c++数组初始化方法
//1.初始化可以省略
double a[4] {
1.3e4,1.2e3,1.6e4,1.7e4};
//2.不添加如何东西,元素为0。
unsigned int counts[10]={
};
float array[100]{
};
//3.列表初始化禁止缩窄转换
long x[]={
25,92,3.0};//浮点数转换为整型是缩窄操作,即使小数点后面为0。
char y[4] {
'h','i',1122011,'\0'};//不允许;1122011超过char变量的取值范围
char z[4]{
'h','i',112,'\0'};//允许,112为int值,但在char取值范围。
4.字符串
c++处理字符串有两种:c_风格字符串,string类方法。
//1. c_风格字符串有一种特殊性质:以空字符结尾,空字符:\0;
char c[8]={
'f','a','t','e','s','s','a','\0'};
//2.用引号括起的字符即可,这种字符串被称字符串常量或字符串面值,
char arr[11]="Mr.Cheeps";//固定大小,后面补\0
char fish[]="Bubbles";//编译器计数
//注:字符串常量(双引号)不能与字符常量(单引号)互换。
//拼接字符串
cout<<"my give my right ar"
"m to a great violinist.\n";
//注:将字符串存储到数组中,最常用的两种方法:
//将数组初始化为字符串常量;
//将键盘或文件输入到数组中;
二、使用string类
string类扩展了C++库,可以使用string类型的变量而不是字符数组存储字符串。
#include <iostream>
#include<string>
using namespace std;
int main()
{
char charr1[20];
char charr2[20]="jaguar";
string str1;
string str2="panther";
cout<<"Enter a kind of feline:";
cin>>charr1;
cout<<"Enter another kind of feline:";
cin>>str1;
cout<<"Here are some feline:\n";
cout<<charr1<<" "<<charr2<<" "<<str1<<" "<<str2<<endl;
cout<<"The third letter in"<<charr2<<"is"<<charr2[2]<<endl;
cout<<"The third leter in"<<str2<<"is"<<str2[2]<<endl;
return 0;
}
使用string对象的方式与使用字符数组相同:
- 可以用c-风格字符串来初始化string对象;
- 可以用cin来将键盘输入存储到string对象中;
- 可以使用cout来显示string对象;
- 可以使用数组表示法来访问存储在string对象中的字符;
1.c++11字符串初始化
//C++11也允许将列表初始化用于c-风格字符串和string对象:
char first_date[]={
"Le Chapon Dodu"};
string third_data = {
"The Bread Boel"};
//赋值:不能就一个数组赋值给另一个数组,但可以将string对象赋值给另一个对象:
char charr1[20];
char charr2[20]="jaguar";
string str1;
string str2="panther";
charr1=charr2;//不可行
str1=str2;
//拼接 附加:使用运算符+将string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾:
string str3;
str3=str1+str2;
str1+=str2;
2.string类其他操作
//用函数strcpy()将字符串复制到字符数组,用strcat()将字符串附加到字符数组末尾:
//string.h
strcpy(charr1,charr2);//将charr2字符数组复制给charr1;
strcat(charr1,charr2);//将charr2字符数组附加到charr1末尾;
strncpy(charr1,charr2,n);//将charr2前面n个字符复制到charr1在并取代charr1前面两个字符,且复制字符个数n不多与charr1原有的字符(不包括'\0')。
strcmp(charr1,charr2);//字符串比较,直到出现不同字符或遇到'\0'为止。相等返回0;charr1>charr2返回一个整数;charr1<charr2返回一个负数。
strlwr();//将大写转换为小写。
strupr