1.3 数据处理
1. const限定符與#define. ?例如const int MONTHS=12將常量MONTHS初始化為12,?其值就被固定了, 編譯器將不允許再修改該常量的值. 容易知使用#define MONTHS 12也能達到同樣的效果, 但const比#define要好一些. 首先, const能夠明確常量的數據類型; 其次, 可以通過C++的作用域規則將常量限定在特定的函數或者文件中; 第三, 可以將const用于更復雜的類型, 如數組和結構, 而#define卻不能這樣使用.
2. 類型轉換. 將0賦給bool變量時,?0將被轉換為false; 而非零值將被轉換成true.
3. 字符串. 字符串有一天特殊的性質: 以空字符/0結尾, 必須最用用一個長度來存儲空字符. 例如char a[10], 最多只能存9個用到的字符, 最用一個空間要用來存空字符. 另一種方法來初始化字符串, 可讓編譯器自動添加結尾的空字符. 例如char a[10]="hello", 那么a[0]~a[4]分別為h,e,l,l,o; a[5]~a[9]全部為空字符/0. 我們要防止出現分配空間不夠的情況, 比如說char b[5]="hello", 沒有用來存儲空字符的空間, 所以這個語句是非法的, 空間不夠. 另外字符串常量和字符常不是同一個概念, 字符串常量用雙引號表示一個字符, 字符常量用單引號, 表示字符的ASCII碼. char a="S" 這個語句是非法的, char a='S' 這個語句是合法的.
4. 拼接字符串. cout<<"I Love "<<"You!" 第一個字符中結尾的空字符被第二個字符的第一個字符取代.
5. 輸入字符串. char name[10]; cin>>name; 那么最多輸入9個字符作為name.
6. 面向行的輸入, getline讀取指定數目的字符或遇到換行符時停止讀取, 并丟棄換行符. 例如讀取將姓名讀入到一個包含20個元素的name數組中, 那么函數最多讀取19個字符, 用法為cin.getline(name,20). getline函數可以拼接起來使用cin.getline(name,20).getline(name2,20).
7. 面向行的輸入, get與用法與getline類似, 但是get并不丟棄換行符, 而是將其留在輸入隊列中, 如果兩次連續調用get(), 例如cin.get(name,20); cin.get(name2,20); 由于第一次調用后, 換行符將留在輸入隊列中, 因此第二次調用時看大的第一個字符便是換行符, 此時get()認為已經達到行尾而終止讀入. get()有另一種變體, 使用不帶任何參數的cin.get()調用可讀取下一個字符(即便是換行符), 可用它來處理換行符. 則可以這樣處理cin.get(name,20); cin.get();?cin.get(name2,20); 當然也可以使用兩個類成員函數(類cin的成員函數)拼接起來使用, 例如cin.get(name,20).get();?cin.get(name2,20);
8. string類, 需要包含#include<string>, string對象和字符數組之間的主要區別是, 可以將string對象聲明為簡單變量, 而不是數組. 例如string str1; 創建一個空的string對象, string str2="father"; 創建一個字符串實體. string對象可以合并, 賦值. 例如string str1, str2, str3; str1="hello"; str2="world"; str3=str1+str2="helloworld";
9. string類的其他操作, 確定字符串長度. 已知string對象str1, 則str1的長度可以通過string類的方法size()確定, 那么str1.size()表示str1的長度. 對于字符串數組, 我們可以通過strlen函數確定, 例如對于字符串name1[20], 那么他內部實際長度(即除去空字符)為strlen(name1). 當然要使用strlen, 最好包含頭文件#include<string.h>或者#include<cstring>.
10. C++結構體. 類似于C語言的結構體, 但有一點不同, 在定義結構體后, 聲明結構體變量時C語言要求有struct關鍵字, 但是C++可以省略struct關鍵字. 例如定義結構體
???? ?struct student
???? {
????????? char name[20];
???????? ?int age;
????? };
聲明的時候C語言要求為struct student stu1; 而對于C++而言只需要student stu1就可以了, 這樣也貼近C++的面向對象思想, 就好想新創建了一個類一樣. 聲明結構體之后, 可以對結構體進行初始化和賦值, 例如 student stu1={"Liming", 20}; student stu2; 可以令stu2=stu1, 那么stu2的內容和stu1的內容就一樣了.
11. 結構體數組. 創建了結構體后, 所創建的結構體就相當于一個類型了, 這個類型的一個集合就相當于一個這個類型的數組了. 例如還是上面創建的結構體student, 定義一個結構體數組student stu[100], 那么久聲明了100個結構體變量了, 分別是stu[0]~stu[99].?也可以初始化結構體數組, 例如
????? student stu2[2]={
????????????? {"Liming", 20},
??????????????{"Xiaonei",30}
?????? };
總結
- 上一篇: 1.2 初窥输入输出、控制语句
- 下一篇: 1.4 指针