第四章
主要讲解C++的数组,字符串,结构体,指针,动态内存,还提出了两种数组代替品——vector和array.
数组和字符串
C++11提供了新的初始化方式:int a[4] {1,2,3,4};
跟单值数据一样,这种初始化方式不能缩窄。字符串和字符数组的区别就是字符串以’\0’结尾;
字符串的初始化:char fish[] = “Bubbles”;自动在末尾加’\0’。
字符串输入cin会自动根据空白(空格,制表符,换行符)识别不同的字符串,即每次只读取一个单词。getline()可以读取整行,在读取到指定数目的字符或遇到换行符时停止读取。例如cin.getline(name,20);
get()的功能和getline()一样,只不过不跳过换行符,如果想跳过换行符需要执行get();否则下次读取的第一个字符就是换行符。一般写为cin.get(name,20).get();在遇到空行时,get()会设置失效位,输入将被阻断,需要输入cin.clear();恢复输入。
string类大部分操作和字符数组相同。不同的是string大小可以由程序自行处理,可以声明简单变量。
string类使得程序可以进行比C风格更简单的操作,例如:
1)赋值:str1 = “char”;str1 = str2; 字符数组不能相互赋值,代替strcpy(charr1,charr2);
2)拼接:str1 = str2 + str3; 代替strcat(charr1,charr2);
3)长度计算:str1.size(); 代替strlen(charr1);
在数组没有初始化之前使用strlen不能得到字符数组的长度,因为strlen是从第一个元素开始计算字节数,直到遇到空字符,未初始化之前第一个空字符出现位置是随机的。同样字符数组也有wchar_t, char16_t,char32_t类型。另外提出了原始字符串,开头和结尾用”(和)”来标识,或者在双引号和括号之间加除了空格,括号,斜杠,控制字符以外的字符来标识,例如”+(和)+”