台大資訊工程學系 資料系統訓練班 第119期 吳晉賢 C 程式設計 台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
補充 講解 #define的用法
課程大綱 C語言簡介 基本資料型態, 變數, 基本輸入輸出 控制敘述- 選擇控制與重覆控制 陣列 函式 指標 字元與字串 結構 檔案處理
字串的定義 所謂字串就是由一群字元構成的字元陣列, 但為了區別字串與一般字元陣列,因此在字元陣列末端加上一個’\0’字元碼,程式一旦讀到’\0’這個字元時,C語研將認定其為字串,同時也意謂著字串的結束. 下面這三個有啥不同? char str[]=“String”; char str[] = {‘S’,’t’,’r’,’i’,’n’,’g’,’\0’}; char ch_array = {‘S’,’t’,’r’,’i’,’n’,’g’};
字串的宣告 宣告字串就跟宣告字元陣列一樣,必須保留’\0’字元所須的空間. 有兩種宣告字串的方式: 例子:輸出字串中每一元素在計憶體的位址 char str[]=“String”; char str[] = {‘S’,’t’,’r’,’i’,’n’,’g’,’\0’}; 例子:輸出字串中每一元素在計憶體的位址 例子:建立一個存放星期名稱的字串, 並且將之輸出.
字串的輸入 scanf()跟gets() scanf()一旦讀到空白時,將會結束讀取動作,因此scanf()無法讀取含有空白間隔的字串; gets()在讀取字串時, 只有在碰到跳行字元’\n’時,才會結束停止的動作 例子1: scanf() 例子2: gets()
字串的輸出 printf()跟puts() puts()一次輸出一個字串,並且不具格式化的輸出,此外輸出完字串後,還會再印出跳行字元’\n’. 例子: 以gets()輸入字串, 再以puts()輸出字串.
其它字串的處理函數 C語言提供使用者許多字串處理的函數, 但在使用前,必須在程式之前引入string.h這個標頭檔.
strlen() 這個功能是用來計算字串的長度,其單位長度以一個byte為單位,但不包括’\0’這個字元. 例子: 輸入一個字串, 計算出該字串的長度.
strcmp() strcmp(str1,str2)會比較兩個字串str1跟str2,比較其內容是否相同,若相同,則傳回0; 若不同,則比較兩個字串第一個不同字元的ASCII碼,若str1>str2,則傳回正數,反之,則傳回負數. 例子:設計一個程式,檢查輸入的字串是否相同.
strcpy() 此函數具有拷貝功能, 可以將一個字串變數拷貝到另一個字串變數中(包含空字元). 例子:使用者輸入一個字串,程式會將該字串覆蓋原程式內定的字串.
strcat() strcat(str1,str2)會把str2字串將加在str1字串之後,覆蓋str1字串的空字元’\0’,並且保留本身的’\0’. 例子:使用strcat()函數,將兩個字串合併為一,並且將之輸出.
toupper()跟tolower() toupper()可以把字元強制轉換成大寫, 而tolower()可以把字元強制轉換成小寫. 例子: 將輸入的小寫字串變大寫, 並將輸入的大寫字串變小寫.
字串陣列 一個陣列的元素若為字串,則稱之為字串陣列.由於字串本身即字元陣列,因此字元陣列可以二維陣列表示之. gets(word[4]); char word[30][50]; gets(word[4]); 以上為讀取輸入字串所需的函數,並且將存入字串陣列word[]的第5個元素. 例子: 輸入一個字串, 並比對該字串是否為一年中的某月.
問題: 計算出輸入字串中各字母的個數. 分別輸入姓跟名,然後把姓和名組合成一個名字,並且改寫小寫英文字母為大寫. 宣告一個二維陣列 (e.g. char name[5][10]; 可存放5個長度10的字串), 讓使用者輸入幾個字串, 將他們排序. Hint: 使用strcmp()