240 likes | 422 Views
程式設計 II. 字串. 字串的基本慨念. 字串是字元的陣列 char str[10]; 字串是指標所指定一串字元 char *str;. 字串的讀取與輸出. 使用 scanf() 與 printf() 使用 gets() 與 puts(). 字串的位址探討. 字串可視為字元陣列,每個字佔一個位元組的記憶體空間。輸出字串可用一個 for 、 while 等迴圈來對陣列內容一一輸出。. 字串 String 的定義. 在 C 語言中使用來儲存一串字元的一種資料結構 比字元陣列多出一個控制字元 『 』 , 用來表示字串的結束 字串
E N D
程式設計II 字串
字串的基本慨念 • 字串是字元的陣列 char str[10]; • 字串是指標所指定一串字元 char *str;
字串的讀取與輸出 • 使用scanf()與printf() • 使用gets()與puts()
字串的位址探討 • 字串可視為字元陣列,每個字佔一個位元組的記憶體空間。輸出字串可用一個for、while等迴圈來對陣列內容一一輸出。
字串String 的定義 • 在C語言中使用來儲存一串字元的一種資料結構 • 比字元陣列多出一個控制字元『\0』,用來表示字串的結束 • 字串 • char a[]="String"; • char a[]={'S','t','r','i','n','g','\0'}; • 字元陣列 • char b[]={'S','t','r','i','n','g'};
字串的宣告(一維陣列) • 語法 • char str[7]={'H','e','l','l','o','!','\0'}; • 以類似字元陣列宣告 • char str[7]="Hello!"; • 直接字串命名的方式 • char str[ ]="Hello!"; • 編譯器會自動配置記憶體空間
輸出字串中每一個元素的內容及位址 1 #include<stdio.h> 2 main(){ 3 char str[] = "example"; 4 int i=0; 5 while(str[i]!='\0'){ 6 7 i++; 8 } 9 } str[i] &str[i] • e 1245044 • x 1245045 • a 1245046 • m 1245047 • p 1245048 • l 1245049 • e 1245050 printf("%c %i\n", str[i] , &str[i]);
字串陣列的宣告 char str[2][8]={"string", "STRING2", "ablmcc"}; 在陣列中的擺放位置如下 str[0]"string" str[1] "STRING2" str[2] "ablmcc"
建立一個字串陣列 1 #include<stdio.h> 2 main(){ 3 int i; 4 char str[4][10]={"one", "two", "three", "four"}; str[0]str[1]str[2]str[3] one two three four 5 for(i=0; i<4; i++) 6 printf("%s\n", str[i]); 7 }
字串的輸入 • scanf() • gets() • 遇到空白字元時,並不會結束, • 其結束的條件為遇到結束符號『\0』 • 沒有上限
利用scanf()輸入字串,並輸出 1 #include<stdio.h> 2 main(){ 4 char str[20]; 5 printf("請輸入一字串:"); 6 scanf("%6s", str);/*指定欄寬為6個字元*/ 7 printf("輸入的字串為:%s", str); 8 } • 請輸入一字串:123456789 • 輸入的字串為:123456
使用gets()輸入字串,並將之輸出 1 #include<stdio.h> 2 main(){ 4 char str[20]; 5 printf("請輸入一字串: "); 6 gets(str); 7 printf("輸入的字串為:%s \n", str); 8 } 請輸入一字串:This is a pen 輸入的字串為:This is a pen
字串的輸出 • printf() • 一次能輸出多個字串 • 具格式化輸出的功能 • puts() • 一次只能輸出一個字串 • 不具格式化輸出的功能 • 每輸出一個字串,puts()也將輸出一個跳列字
gets()輸入字串,puts()輸出字串 1 #include<stdio.h> 2 main(){ 4 char input[20]; 5 puts("請輸入字串: "); 免費送\n • 請輸入字串: 6 gets(input); 7 puts(input); 8 } This is a pen This is a pen |
其它字串的處理函數 • 使用前,需加入string.h的標頭檔 • strlen(s) :計算字串長度 • strcmp(s1,s2) :比較字串 (s1-s2) • strcpy(s1,s2); :複製字串 s1s2 • strcat(s1,s2); :合併字串 s1s1+s2 • toupper(c) :將字符轉換成大寫字母 • tolower(c) :將字符轉換成小寫字母
字串的長度 1 #include<stdio.h> 2 #include<string.h> 3 main(){ 4 char str[30]; 5 int n; 6 printf("輸入一字串:"); 7 gets(str); • 輸入一字串:cat & dog 字串長度為:9 8 n = strlen(str); /*求str的長度*/ 9 printf("字串長度為:%i\n", n); 0 }
strcmp(s1,s2)函數 • 語法 • 整數型態變數 = strcmp(字串1,字串2) • 說明 • n = strcmp (s1,s2) 會將字串1與字串2做比較 • 整數型態變數 n 0代表 s1=s2 -1 表示 s1<s2 +1 表示 s1>s2
檢查輸入的字串是否相同 1 #include<stdio.h> 2 #include<string.h> 3 main(){ 4 char str1[20], str2[20]; 5 int n; • 輸入字串1:computer • 輸入字串2:COMPUTER 6 printf("輸入字串1:"); 7 gets(str1); 8 printf("輸入字串2:"); 9 gets(str2);
字串比較 1 n = strcmp (str1, str2); 2 if(n==0) 3 puts("str1=str2"); 請輸入字串1:comp 請輸入字串2:comp str1=str2 請輸入字串1:cpu 請輸入字串2:mouse str1<str2 4 else if(n<0) 5 puts("str1<str2"); 6 else 7 puts("str1>str2"); 8 } 請輸入字串1:fan 請輸入字串2:FAN str1>str2
strcpy()函數 • 語法 • strcpy (字串1, 字串2); • 說明 • 字串1:將要被複製成跟字串2相同內容的字串 • 字串2:將要複製給字串1的字串 • 此函數可將字串2變數的內容拷貝到字串1的內容(包含空字元) // str1str2
strcat()函數 • 語法 • strcat (str1, str2); • 說明 • 合併 str1及str2 • str2將會覆蓋住str1字串的結束字元'\0',且保留本身的結束字元'\0'
合併前 str1= Open 合併後 str1= Open University 使用strcat()函數,將兩個字串合併 1 #include<stdio.h> 2 #include<string.h> 3 main(){ 4 char str1[20]="Open "; 5 char str2[20]="University"; 6 printf("合併前str1=%s\n", str1); 7 strcat (str1, str2); 8 printf("合併後str1=%s\n”, str1); 9 }
toupper()函數及tolower()函數 • 語法 • 字元 = tolower(字元); • 字元 = toupper(字元); • 說明 • 需加入ctype.h的標頭擋 • toupper(c)函數可以將字元c強制轉換成大寫 • tolower(c)函數可以將字元c強制轉換成小寫
小寫字串轉換成大寫 並將輸入的大寫字串轉換成小寫 11 printf("輸入字串二: "); 12 gets(str2); 13 for (i = 0 ; i<strlen(str2); i++) 14 str2[i] = toupper( str2[i] ); 15 printf("小寫轉大寫: %s\n", str2); 16 } 1 #include<stdio.h> 2 #include<ctype.h> 3 main(){ 4 int i; 5 char str1[10], str2[10]; 6 printf("輸入字串一: "); 7 gets(str1); 8 for (i = 0 ; str1[i] != '\0'; i++) 9 str1[i] = tolower( str1[i] ); 10 printf("大寫轉小寫: %s\n", str1); • 輸入字串一: ABCd • 大寫轉小寫:abcd • 輸入字串二: eFg • 小寫轉大寫: EFG