Excel如何設置動態求和 Excel設置動態求和方法
1158
2022-05-29
文章目錄
1. 字符和字符串
2. 結構體
3. 共用體
4. 結構體和共用體的占地面積(在內存中大小)
5. 枚舉
6. 靜態數組和動態數組(需要創建指針)
1. 字符和字符串
第一種創建字符串的方法:
int main() { char ch_1[] = { 'f','d','o','g' }; char ch_2[] = { 'f','d','o','g','
int main() { char ch_1[] = { 'f','d','o','g' }; char ch_2[] = { 'f','d','o','g','\0' }; cout << ch_1 << endl; cout << ch_2 << endl; }
' }; cout << ch_1 << endl; cout << ch_2 << endl; }1
2
3
4
5
6
ch_1和ch_2都是char字符數組,但是ch_2擁有字符串特有的
ch_1和ch_2都是char字符數組,但是ch_2擁有字符串特有的\0,所以ch_2也被稱為字符串,而ch_1由于沒有\0,所以不能成為字符串。
,所以ch_2也被稱為字符串,而ch_1由于沒有ch_1和ch_2都是char字符數組,但是ch_2擁有字符串特有的\0,所以ch_2也被稱為字符串,而ch_1由于沒有\0,所以不能成為字符串。
,所以不能成為字符串。想要使用cout輸出兩個字符數組,第二個被正常輸出,第一個正常輸出后出現了亂碼,處理字符串的函數,像cout輸出字符串,它們都會把字符串里面的字符一個一個的進行處理,如果遇到空字符,則停止處理,由于第一種寫法沒有寫入
想要使用cout輸出兩個字符數組,第二個被正常輸出,第一個正常輸出后出現了亂碼,處理字符串的函數,像cout輸出字符串,它們都會把字符串里面的字符一個一個的進行處理,如果遇到空字符,則停止處理,由于第一種寫法沒有寫入\0,所以cout會一直處理,直到在內存中遇到空字符,好在內存中存在很多的空字符,所以才會出現上述情況。
,所以cout會一直處理,直到在內存中遇到空字符,好在內存中存在很多的空字符,所以才會出現上述情況。好了,上面這種了解了解就好,要是一個字符一個字符輸入,不得累死!我們看更高級一點的:
char ch[]="Fodg";
使用引號括起來的一串字符,會自動添加
使用引號括起來的一串字符,會自動添加\0并隱藏,并成為字符串,并且,C++會將從鍵盤得到的一串字符自動添加\0成為字符串。
并隱藏,并成為字符串,并且,C++會將從鍵盤得到的一串字符自動添加使用引號括起來的一串字符,會自動添加\0并隱藏,并成為字符串,并且,C++會將從鍵盤得到的一串字符自動添加\0成為字符串。
成為字符串。字符串常量(使用雙引號)不能與字符常量(使用單引號)互換,看下面:
char c = "a";//這種寫法是錯誤的 char * c = "a"; //這種寫法是正確的,可以證明"a"的實質是地址
1
下面才是重頭戲,C++是面向對象的一門編程語言,那怎么能沒有類,既然有類,怎么能沒有String,學習過面向對象的人應該都知道string的方便。
#include
1
2
3
4
5
運行結果:
各位記得要輸出str_1[0]和str_1[1],還記不記得中文是用連個字節存儲的,只輸出一個是無法顯示完整漢字的,這里要千萬注意。
C++新增的string方便遠遠不及于此,往下看。
string字符串的拼接:
string str_1 = "花狗"; string str_2 = "Fdog"; string str_3 = str_1+str_2;
1
2
運行結果:
這種技術叫做運算符重載,C++將+進行重載,后面我們會學習到。
string字符串的附加:
string str_1 = "花狗"; string str_2 = "Fdog"; str_2 += str_1; cout< 1 2 3 運行結果: 篇幅有限,有關字符串的深入,將另外說明。 2. 結構體 聲明結構體使用struct關鍵字,創建形式如下: struct student { //這里可以添加C++基本類型 };//注意分號,很多初學者會把分號忘記 1 2 3 創建結構體有什么用呢?舉一個不太恰當的例子: C++是面向對象的一門語言,比如人就是一個對象,人這個對象有屬性,比如姓名,性別,年齡,這些單個的屬性我們都可以使用特點的基礎類型去定義,例如姓名,可以用char name[10],年齡可以使用int類型去定義,這都是沒有問題的。但是如果有500個人需要存儲他們的屬性,難道我們要創建500個char 500個int?假如他們的的屬性不止三項這樣,分開存儲確實可以,但是人們希望有一種數據類型,可以存儲每個人的所有屬性,進行統一管理,互不相干,于是struct就誕生了, struct student { char name[10]; //姓名存儲 char sex[10]; //性別存儲 int age; //年齡存儲 }; int main() { struct student s1; s1.age = 21; //s1.name = "花狗"; //s1.sex = "男"; 這里出現了錯誤,提示表達式必須是可修改的左值。 //這是為什么呢?原因是數組的初始化規則,它們限制了初始化的時刻,決定了數組的元素數目與初始化 //器中的值的數目不相同時將發生的情況,例如下面: char name[10] = "花狗";//這是被允許的 char name1[10]; //name = "花狗"; 這是不被允許的 //但是可以如下的方法為結構體賦值 //第一種: struct student s2 = { "花狗","男",21 }; student s3{ "大頭","男",21 }; //和C語言不同,C++允許用戶省略struct關鍵字,并且等號也是可省略的 //第二種: student s4 = { "小頭", "女", 21 };//要注意最后的分號 //上述使用的是靜態數組,我們并不能保證name[10]是否能存儲下其他名字, //如果定義為name[100]倒是可以存儲名字,不必擔心溢出 //但是也浪費內存空間,更為高級的一種方法是動態數組, //name需要多少內存由用戶輸入的內容大小決定并自行申請內存。后面會講。 } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 上述使用的是靜態數組,我們并不能保證name[10]是否能存儲下其他名字,如果定義為name[100]倒是可以存儲名字,不必擔心溢出,但是也浪費內存空間,更為高級的一種方法是動態數組, name需要多少內存由用戶輸入的內容大小決定并自行申請內存。后面會講。 結構體更為高級的用法是: typedef struct student { char name[10]; //姓名存儲 char sex[10]; //性別存儲 int age; //年齡存儲 }student_1,*student_1; 1 2 3 4 5 在C語言中,想要使用結構體變量,必須使用struct,如果不想使用struct,則可以使用typedef關鍵字為struct stdent 起一個別名,也就是student_1。 雖然C++中不需要起別名也可以省略,但應該知道typedef這個關鍵字,至于*student_1,是定義了一個結構體指針,關于指針,這里不再多說,只需知道有這種寫法。 3. 共用體 共用體和結構體的聲明或者說定義方式是一樣的,只是關鍵字不一樣: union world { short short_val; int int_val; long long_val; }; //怎么理解共用體呢,它是能像結構體一樣存儲不同類型的數據,但是同一時間只能存儲其中的一種,比如我定義了一個共用體對象 //這個對象同時只能在同一時間使用共用體中的一種數據, //world a = { 78,78,78L };//這是錯誤的用法,會提示初始值太多 world b; b.int_val = 12; b.long_val = 21L; b.short_val = 33; cout << b.int_val;//結果不確定,b現在只有short_val的值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 4. 結構體和共用體的占地面積(在內存中大?。?/p> 寫完結構體和共用體,來看看它們所占的內存為多少: 結構體: struct student { char name[10]; //姓名存儲 char sex[10]; //性別存儲 int age; //年齡存儲 }; 1 2 3 4 5 共用體: union world { short short_val; int int_val; long long llong_val; }; 1 2 3 4 5 cout << sizeof(student) << endl; cout << sizeof(world) << endl; 1 運行結果: 結構體10+10+4為24,這個沒有任何疑問,而共用體只有8,這也是其名字的來源,共用,就是共用一塊內存,但其要保證其內存為其中數據類型的最大值,也就是long long類型的大小。 復合類型:由基本類型為基礎,創建的像結構體,共用體便是復合類型,復合類型也是一種數據結構,它還可以和其他的復合類型所構造, 只不過這類類型需要用戶根據自身需求定義罷了。 5. 枚舉 C++的enum工具提供了另一種創建符號常量的方法,這種方法可以替代const,而且還允許定義新類型。 語法如下: enum color {red,yellow,blue}; // color是新類型的名稱,red,yellow,blue將作為符號常量,它們對應的值為0,1,2,依次遞增。 // 也可以顯式的自定義符號常量的值: //enum color {red=3,yellow=2,blue=1}; //自定義的值必須是整形。 color a; a = red; // 正確 a = 3; //不可以,3是非enum值, // 對于枚舉,C++只定義了賦值運算符,并沒有為枚舉定義算術運算符,但是, //如果執行下面操作,枚舉將會被轉換為int類型 int b = red+1; 1 2 3 4 5 6 7 8 9 10 11 12 枚舉的取值范圍: 首先找到枚舉最大值和最小值,找到大于值最小值的2的冪,將它減去1,得到的便是取值范圍的上線,例如某枚舉最大值為101,在2的冪比這個數大的是128,減1為127,這個127就是這個枚舉的上限,如果枚舉的最小值不小于0,那么0就是枚舉的下限,如果最小值小于0,則采用上述方法,例如最小值為-6,比它小的2的冪為8,8-1為7,但要加上負號為-7,這便是下限。 6. 靜態數組和動態數組(需要創建指針) int main() { //比如我要記錄一個班的成績,拿靜態數組來做的會是這個樣子: int num[100];//這里這個100是我自己估算的,我也不知道這個班會有多少人,有可能10個,有可能200個, //所以靜態數組只適用于在編譯之前就已經確定了的數值 //如果使用動態數組,我們可以有一個人頭,加一個人頭,不再擔心內存空間浪費。 int * num = new int[10]; //這句話的意思是申請20個字節的內存用來存放int數據,這就是動態數組,與之隨行的是delete。 //delete用于釋放申請的內存。 } 1 2 3 4 5 6 7 8 9 下面用一個例子說明使用動態數組的好處: int main() { int num = -1; int * number = NULL; while (num) { cout << "請輸入同學的年齡:" << endl; cin >> num; if (num > 0)//當輸入負數則停止 { number = new int[0];//申請一個int大小的內存存放num } else { return 0; } } delete number; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 當使用動態數組時不用考慮數量問題,這就是使用動態數組的好處。由于篇幅有限,有關動態數組的高級應用以及期間需要主要的問題,我們另起一篇詳談。 C++ 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。