第 4 章 复合类型
一、数组
潜规则:
① 只有在定义数组时才能使用初始化。
② 不能将一个数组赋给另一个数组。
③ 如果初始化为{1},则表示第一个元素被设置为1,其他元素被设置为0。
二、字符串
注意要点:
① 在确定存储字符串所需的最短数组时,记得将结尾的空字符计算在内。
② 如果要显示部分字符串,只需将需要的字符串的结尾标记为'\0'。
③ 每次读取一行字符串输入
(1)getline()
使用通过回车键输入的换行符来确定输入结尾。数组中用cin.getline(name,n),其他类型用getline(cin,name).
值得注意的是,getline还允许在输入字符串时增加其他分隔符,使用方法是把可以作为分隔符的第三个参数传递给getline,例如:
#include<iostream>
#include<string>
using namespace std;
int main()
{
for(int i=0;i<2;i++)
{
string city,state;
getline(cin,city,',');
getline(cin,state);
cout<<"City:"<<city<<" State:"<<state<<endl;
}
return 0;
}
运行结果:
Beijing,China
City:Beijing State:China
San Francisco,the United Ststes
City:San Francisco State:the United Ststes
City:Beijing State:China
San Francisco,the United Ststes
City:San Francisco State:the United Ststes
(2)get()
a,使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符)
b,cin.get(name,n)输入整行
c,cin.get(char)读取输入中的下一个字符串(即便是空格)
(3)混合输入数字和面向行的字符串需要添加上述的a或c形式读取并丢弃换行符。如:
cin >> year;
cin.get();
cin >> name;
或者直接合并:(cin >>year).get();
三、string 类简介
潜规则:
① 可以将一个string对象赋给另一个string对象。
② 可以使用运算符+用于字符串的合并。
③ 在头文件cstring下,可以使用函数strcpy()将字符串复制到字符数组中,使用函数strcat()将字符串添加到字符数组末尾。
四、结构及共用体
共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。
五、枚举
例如:
enum spectrum {red,orange,yellow,green,blue,violet,indigo,ultraviolet};
① 可以用枚举名来声明这种类型的变量:spectrum band;
② 在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量:
band = orange;
③ 枚举中只定义了赋值运算符:
++band(×)
band = orange + red(×)
④ 如果 int的值是有效的,则可以通过强制类型转换,将它赋给枚举变量:
band = spectrum(3);
⑤ 枚举类型的名称是可以省略的。
六、指针、数组和指针算数
对于const char * bird = "wren"的解释:
① "wren"实际表示的是字符串的地址
② 字符串的字面值是常量,故在声明中使用关键字const。
七、数组的替代品
1、vector
包含头文件vector,是一种动态数组。
vector<typename> vt(n)
示例:
<strong>#include<iostream>
...
using namespace std;
vector<int> vi;
int n;
cin >> n;
vector<double> vd(n);</strong>
2、模板类 array(c++11)
包含头文件array。
array<type,n>arr
示例:
#include<iostream>
...
using namespace std;
array<int,5> ai;
array<double,4> ad = {1.2,2.1,3.43,4.3};
与vector不同的是,n不能为变量,且可直接将一个array对象赋给另一个。