290 likes | 457 Views
補充教材. 字串與字元操作. 計算字串長度. int strlen(char s[]) { int length = 0; for (int i=0; s[i] != ‘’; i++) length++; return length; }. 請設計以下副函式 int strlen(char s[]); 計算字串 s 中的長度。. 判斷字串是否為數字. bool isDigit(char s[]) {
E N D
計算字串長度 int strlen(char s[]) { int length = 0; for (int i=0; s[i] != ‘\0’; i++) length++; return length; } • 請設計以下副函式 int strlen(char s[]); • 計算字串s中的長度。
判斷字串是否為數字 bool isDigit(char s[]) { for (int i=0; s[i] != ‘\0’; i++) if (s[i] < ‘0’ || s[i] > ‘9’) return false; return true; } • 請設計以下副函式 bool isDigit(char s[]); • 如果s為數字,則回傳true;否則,則回傳false。
將字串轉換成大寫 void toUpper(char s[]) { for (int i=0; s[i] != ‘\0’; i++) if (s[i] >= ‘a’ && s[i] <= ‘z’) s[i] = ‘A’ + s[i] – ‘a’; } • 請設計以下副函式 void toUpper(char s[]); • 將s中的小寫字母轉換成大寫。
比較兩字串 (1) • 字串比較原則 • 兩個字串的字元一個一個做相減,回傳第一個非零的結果。 • 範例 • Example 1 • “abc” < “abd” • 前面的字元互相相減都為零,一直到比較「c」和「d」時,才得到一個非零的結果(d比c大),故使得”abc”<“abd”。 • Example 2 • “abc” < “abcc” • 前面三個字元互相相減都為零,「abc」已經沒有字元可比,故「abcc」比較大。
比較兩字串 (2) • 請設計以下副函式 int strcmp(char s1[], char s2[]); • 比較兩字串s1與s2 • 如果s1>s2,則回傳值大於0(s1-s2>0); • 如果s1<s2,則回傳值小於0(s1-s2<0); • 如果s1=s2,則回傳值等於0(s1-s2=0)。
比較兩字串 (3) int strcmp(char s1[], char s2[]) { int i = 0; for (i=0; s1[i] != ‘\0’ && s2[i] != ‘\0’; i++) if (s1[i] != s2[i]) return s1[i] – s2[i]; return s1[i] – s2[i]; } • 根據以上程式,試圖比較以下字串: • 「banana」與「bone」 • 「apple」與「application」 • 「aaa」與「aa」 • 「the」與「the」
練習題:複製字串 • 請設計以下副函式 void strcpy(char s1[], char s2[]); • 將s1中的內容(字元)複製到s2裡 • Key point:記住要字串結尾要有結束字元
練習題:串接字串 • 請設計以下副函式 void strcat(char s1[], char s2[]); • 將s2中的內容(字元)串接到到s1裡 • 例如:s1為「add」、s2為「ition」,呼叫完strcat()之後,s1變成「addition」。
一個字串 a p p l e \0 • 字串為一維(且結尾附加結束字元)的字元陣列。 • 宣告方式 char str[100];
很多字串 a p p l e \0 a d d \0 b o n e \0 w i n \0 • 如果有很多字串儲存在一起呢? • 字串陣列;又每個字串都是一個一維的字元陣列 • 故字串陣列實際上就形成了一個二維的字元陣列 • 宣告方式 char strArray[4][6]; • strArray[2][3]:字串3的字元4是…
字串陣列 最多有幾個字串 每個字串最多有幾個字元 0 1 2 3 4 5 strArray[0] a p p l e \0 strArray[1] a d d \0 strArray[2] b o n e \0 strArray[3] w i n \0 char strArray[4] [6]
字串陣列 0 1 2 3 4 5 strArray[0] a p p l e \0 strArray[1] a d d \0 strArray[2] b o n e \0 strArray[3] w i n \0 • 每一列都可被當成一個字串來使用 • strArray[i][j]:這樣是一個字元 • 型態為char char strArray[4][6]; • strArray[i]:這樣是一個字串(row i) • 型態為char [] char strArray[4] [6];
字串陣列:使用範例 • 比較字串0和字串2是否相等: strcmp(strArray[0], strArray[2]); • 將輸入的字串拷貝到字串1: char input[100]; cin >> input; strcpy(strArray[1], input);
字串陣列:使用範例 char strArray[100][100]; char input[100]; int count = 0; do { cin >> input; strcpy(strArray[count], input); count++; if (count >= 100) break; } while (1); 連續讀入字串,再將字串讀入陣列中儲存
將副函式收集到一個檔案中 新增新的項目
選擇「C++檔案」並輸入檔名 • 副檔名:.cpp • 檔案名稱要盡量與程式內容相關
建立標頭檔 新增新的項目
選擇「標頭檔」並輸入檔名 • 副檔名:.h • 檔案名稱最好能與對應的.cpp檔相同
輸入prototype 注意:XXXXX為標頭檔檔名,一般要輸入大寫以示區隔,絕對不可與其他檔案中所定義的重複 副函式的prototype定義於此。 • 請在檔案的前後用以下的敘述匡住: #ifndefXXXXX_H #defineXXXXX_H #endif • 此敘述可用來避免重複宣告
MyString.h MyString.cpp 各檔案的內容如下:
主函式如何使用副函式 • 為副函式建立標頭檔 • 把prototype放入其中 • 在主函式所在的檔案中載入標頭檔,即可用以宣告副函式。
範例 • 如果主函式需要用到函式庫當中的副函式時 • 先確認其.cpp與.h是否已經加到專案 • 請檢查方案總管 • 檢視->方案總管 • 在專案底下點選原始程式碼與標頭檔檢查是否已存在當中 • 如果沒有 • 先將該檔案複製到專案中main函式所屬的目錄夾檔中 • 在方案總管的原始程式碼上右按滑鼠,選擇加入現有項目,將該檔案(.cpp與.h檔)加入專案裡
範例 • 在主函式一開頭將其標頭檔include進來即可使用# • 因此,一旦往後有其他專案也需用到該副函式,只需要把他的.cpp檔與.h檔拷貝至專案目錄夾中,用方案總管加入專案中,再於需要檔案中include其標頭檔,即可馬上使用,不需再重寫一遍。