1.数组
数组(array)是一种数据格式,能够存储多个同类型的值,数组可以存储60个int类型的值、12个short值或365个float值。每个值都存储在一个独立的数组元素中。
数组声明应指出以下三点:
1.存储在每个元素中的值得类型
2.数组名
3.数组中的元素数
初始化数组的规则:
1.只有在定义数组时才能使用初始化
2.不能将一个数组赋给另一个数组
3.提供的数值可以少于数组的元素数目,未赋值的元素为0
4.如果初始化数组方括号【】为空,编译器将计算元素个数
5.初始化数组时可省略等号
6.列表初始化禁止缩窄转换
例:
int cards[4] = {3,6,8,10}
char hand[4] {‘h’,‘e’,‘l’,‘l’}
long plifs[] = {25,92,3}
2.字符串
char boss[8] = “Bozo”;
空值字符自动加到结尾,其余元素设置为\0,"Bozo"实际上表示的是字符串所在的地址,所以不能用char
下面用一个程序在数组中使用字符串:
//storing strings in an array 储存一个字符串在数组里
#include<iostream>
#include<cstring> //调用strlen()函数
int main()
{
using namespace std;
const int Size = 15;
char name1[Size];
char name2[Size] = "C++owboy";
cout<<"Howdy! I'm "<<name2;
cout<<"!What's your name?\n";
cin>>name1;
cout<<"Well,"<<name1<<",your name has ";
cout<<strlen(name1)<<" letters and is stroed\n";//strlen()返回存储在数组中的字符串长度,不算空字符
cout<<"in an array of "<<sizeof(name1)<<" bytes.\n";//sizeof()返回整个数组的长度
cout<<"Your initial is "<<name1[0]<<".\n";
name2[3] = '\0'; //设置空字符
cout<<"Here are the frist 3 characters of my name:";
cout<<name2<<endl; //输出到空字符结束
system("pause");
return 0;
}
字符串输入:
cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词,读取单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。
getline()函数读取整行,使用通过回车键输入的换行符俩确定输入结尾,如果读取参数为20,则函数最多读取19个字符
cin.getline(name,20);//将姓名读入到一个包含20个元素的name数组
get()同getline()函数一样,但get()不再读取并丢弃换行符,而是将其留在输入队列中,使用get()函数后,使用不带任何参数的cin.get()调用可读取下一个字符,为读取下一行输入做好准备,或者将输入中连续的两行分别读入数组中,效果同两次调用cin.getline()相同
以下三种形式输入都相同:
cin.get(name,Size);
cin.get();
cin.get(dessert,Size);
//
cin.get(name,Size).get();
//
cin.get(name,Size).getline(dessert,Size);
当getline()读取空行时,下一条输入语句将在结束读取的位置开始读取,get()读取空行时将设置失效位(failbit),输入将被阻断,但可以用下列命令恢复输入:
cin.clear();
如果输入行包含的字符数比指定的多,则把余下的字符留在输入队列中,getline()还会设置失效位,并关闭后面的输入
下面用一个程序混合输入字符串和数字:
//following number input with line input 混合输入数字和字符串
#include<iostream>
int main()
{
using namespace std;
int year;
cout<<"What year was your house built?\n";
cin>>year;//(cin>>year).get(ch) 下一次输入时会把回车当作空行,赋给下一个数组
cin.get();//cin.get(ch) 读取并丢弃换行符
cout<<"what is its street address?\n";
char address[80];
cin.getline(address,80);
cout<<"Year built: "<<year<<endl;
cout<<"Address: "<<address<<endl;
cout<<"Done!\n";
system("pause");
return 0;
}
cin读取年份,会将回车键生成的换行符留在了队列中,cin,getline()看到换行符,认为是一个空行,并将一个空字符串赋给address数组,应当在读取地址之前所读取并丢弃换行符
3.string类简介
要使用string类,必须在程序中包含头文件string,或者使用std::string来引用它
string对象和字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组,并且能自动处理string的大小。
初始化示例:
char first_date[] = {“Le Chapon Dodu”};
char second_date[] {“The Elegant plate”};
string third_date = {“The Bread Bowl”};
string fourth_date {“Hank’s Fine Eats”};
使用string类,可以将一个string对象赋给另一个string对象,并且可以使用运算符+或+=
string str1;
string str2 = "pather";
str1 = str2;
string str3;
str3 = str1+str2;
str1 += str2; //将str2加到str1结尾
函数strlen()从数组的第一个元素开始计算字节数,直到遇到空字符
未初始化的数组,第一个空字符出现的位置随机,长度也是随机,未被初始化的string对象的长度自动设置为0
4.结构简介
结构是用户定义的类型,而结构声明定义了这种类型的数据属性。例:
struct inflatable //关键字 名称
{
char name[20];
float volume;
double price;
};//有分号作为结束声明
下面在一个使用结构的程序中使用:
//a simple structure 一个简单的结构使用
#include<iostream>
struct inflatable //structure declaration 结构声明
{
char name[20];
float volume;
double price;
};
int main()
{
using namespace std;
inflatable guest =
{
"Glorious Gloria",
1.88,
29.99
};//guest is a structure variable of type inflatable
//It&#