C++ Primer Plus学习笔记三(第四章)
目录
1)创建和使用数组
2)字符串
3)字符串的输入
4)string类
5)结构
1)创建和使用数组
a)数组被称为复合类型,是因为它是使用其它类型来创建的。不能仅仅将某种东西声明为数组,它必须是特定类型的数组。
b)如果将一个值赋给不存在的元素months【13】,编译器并不会指出错误,但是会引发问题,可能破坏数据或代码,或者导致程序异常终止。
c)将sizeof运算符用于数组名,得到的是整个数组的字节数。但如果用于数组元素,得到的是元素的长度(单位字节)。
d)初始化时,提供的值可以是少于数组的元素数目。如果只对一部分赋值,则其它默认为0。如果初始化数组方括号【】内为空,则编译器计算元素个数。但注意:让编译器去计算元素个数的方法很糟糕,可能计数与你想象的不一样。
e)大括号初始化可省略等号(=),如double earning【4】{1.2e,1.6e}。注意,列表初始化禁止缩窄转换。
long profits【】{12,23, 30.0}//出错,因为将浮点数转换为整形是缩窄操作。
2)字符串
a)C风格--以空字符结尾,空字符被写为\0,其ASCII码为0,用来标记字符串的结尾。
b)在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。
c)字符串常量与字符常量不可互换。
char shirt_size='s';//单引号,表示字符常量
char shirt_size="s";//双引号,表示字符串常量,实际上是字符串的内存地址。
d)C++允许拼接字符串字面值,即将两个用引号括起的字符串合并为一个。任何两个空白(空格、制表符和换行符)分隔的字符串常量都将自行拼接成一个。第二个字符串的第一个字符紧跟在第一个字符串的最后一个字符后面。
cout<<"good good study"
"day day up"<<endl;//这里有个换行符
f)strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度,且只计算可见的字符,而不把空字符计算在内。
3)字符串的输入
a)getline()和get()在istream类中,都将读取一行输入,直到到达换行符。然而,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
b)getline读取整行。cin.getline()有两个参数,第一个是数组名,第二个是读取的字符数。如参数为20,则最多读入19个,加一个空字符。getline在读取指定数目的字符或遇到换行符时停止读取。
cin.getline(name,20);
c)get第一种用法跟getline一样,但是get并不丢弃换行符,将其保留在输入队列中。第二次次调用get()时,遇到的第一个字符便是换行符,影响读入。于是第二种方法出现,cin.get()不带任何参数,调用它可读取下一个字符,可处理换行符。
cin.get(name,Arsize);
cin.get();
cin.get(dessert,Arsize);
或者
cin.get(name,Arsize).get();//拼接起来使用
cin.getline(name1,Arsize).getline(name2,Arsize);//把输入中连续的两行分别读入到数组name1和name2中
4)string类
a)string类包含在头文件string中,位于名称空间std中。
可以使用C风格字符串来初始化string对象。
可以使用cin来将键盘输入存储到string对象中。
可以使用cout来显示string对象。
可以使用数组表示法来访问存储在string对象中的字符。
b)string对象和字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组。
string str1;
string str2="panther";
c)不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象。string类简化了字符串合并操作。可以使用运算符+将两个string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾。
string str3;
str3=str1+str2;
str1+=str2;
d)strcpy()将字符串复制到字符数组中,strcat()将字符串附加到字符数组末尾。
strcpy(charr1,charr2);
strcat(charr1,charr2);
e)新类型
wchar_t title[ ]=L "Chief Astrogator";
char16_t name[ ]=u "Felonia Ripova";
char32_t car[ ]=U "Humber Super Sbipe";
5)结构
a)定义结构后,便可以创建这种类型的变量了。
struct inflatable{};
inflatable hat;
inflatable mainframe;
b)C++11也支持将列表初始化用于结构,且等号(=)是可选的。如果大括号内未包含任何东西,各个成员都将被设置为0。
inflatable duck{"Daphne", 0.12, 9.98};
c)可以使用赋值运算符(=)将结果赋给另一个同类型的结构,这样结构中每个成员都将被设置为另一个结构总相应成员的值,即使成员是数组。这种赋值叫成员赋值。
d)结构数组。可以创建元素为结构的数组,方法和创建基本类型数组完全相同。