Upload
christopher-blair
View
23
Download
2
Embed Size (px)
DESCRIPTION
第九章 字串. 本章學習重點. 9-1 字串的基本架構 9-2 字串的輸入及輸出 9-3 字串的函數. 9-1-1 字串的定義. 字串 (String) 在 C 語言中使用來儲存一串字元的一種資料結構 比字元陣列多出一個控制字元 『 \0 』 ,用來表示字串的結束 字串 char a[ ]=”String”; char a[ ]={‘S’, ’t’, ’r’, ’i’, ’n’, ’g’, ’\0’}; 字元陣列 char b[ ]={‘S’, ’t’, ’r’, ’i’, ’n’, ’g’};. 9-1-2 字串的宣告 ( 一維陣列 ). 語法 - PowerPoint PPT Presentation
Citation preview
第九章 字串
2
本章學習重點9-1 字串的基本架構9-2 字串的輸入及輸出9-3 字串的函數
3
9-1-1 字串的定義
•字串 (String) – 在 C 語言中使用來儲存一串字元的一種資料結構
• 比字元陣列多出一個控制字元『 \0 』,用來表示字串的結束
– 字串 • char a[ ]=”String”;
• char a[ ]={‘S’, ’t’, ’r’, ’i’, ’n’, ’g’, ’\0’};
– 字元陣列 • char b[ ]={‘S’, ’t’, ’r’, ’i’, ’n’, ’g’};
4
9-1-2 字串的宣告 ( 一維陣列 )
• 語法– char str[7]={‘H’, ’e’, ’l’, ’l’, ’o’, ’!’, ’\0’};
• 以類似字元陣列宣告– char str[7]=”Hello!”;
•直接字串命名的方式 – char str[ ]=”Hello!”;
•編譯器會自動配置記憶體空間
5
範例 Ch9_2(1/2) ch9_2 輸出字串中每一個元素的內容及位址1 #include<stdio.h> 2 void main( )3 { 4 int i = 0;5 char str[ ] = "example";6 while(str[i]!=‘\0’) 7 { 8 printf("%c", str[i]);9 printf(" %d\n", &str[i]);10 i++; 11 }12 }
6
ch9_2 輸出結果 (2/2)
• 程式執行結果
e 1245044
x 1245045
a 1245046
m 1245047
p 1245048
l 1245049
e 1245050
7
9-1-3 字串的宣告 ( 二維陣列 )
str[2][8]={“string1”, ”string2”};
在陣列中的擺放位置如下
Column( 行 )
Row( 列 )
str[0][0]
str[0][1]
str[0][2]
str[0][3]
str[0][4]
str[0][5]
str[0][6]
str[0][7]
s t r i n g 1 \0
str[1][0]
str[1][1]
str[1][2]
str[1][3]
str[1][4]
str[1][5]
str[1][6]
str[1][7]
s t r i n g 2 \0
8
範例 Ch9_3(1/2)
ch9_3 建立一個存放一到四的字串陣列,並且將之輸出 1 #include<stdio.h>
2 void main( )
3 {
4 int i;
5 char str[4][10]={“one”, ”two”, ”three”, ”four”};
6 for(i=0; i < 4; i++)
7 printf(“%s\n”, str[i]);
8 }
9
Ch9_3 輸出結果 (2/2)
• 程式執行結果
one
two
three
four
10
9-2 字串的輸入及輸出
9-2-1 字串的輸入 – scanf( )
– gets( ) • 遇到空白字元時 ,並不會結束,其結束的條件為遇到結束符號『 \0 』
宣告方式 宣告格式 結束條件未指定欄寬 scanf(“%s”, str); 當讀到空白字元
指定欄寬 scanf(“%#s”, str);/* 其中 # 表示一正整數 *
/
1. 讀到空白字元時2. 超過指定欄寬時
11
範例 Ch9_4(1/2)
ch9_4 利用 scanf( ) 輸入字串,並輸出1 #include<stdio.h>
2 void main( )
3 {
4 char str[10];
5 printf(" 請輸入一字串: ");
6 scanf(“%6s”, str); /* 指定欄寬為 6個字元 */7 printf(" 輸入的字串為: %s", str);
8 }
12
ch9_4 輸出結果 (2/2)
• 程式執行結果
請輸入一字串: 123456789
輸入的字串為: 123456
13
範例 Ch9_5(1/2)
ch9_5 使用 gets( ) 輸入字串,並將之輸出 1 #include<stdio.h>
2 void main( )
3 {
4 char str[20];
5 printf(“ 請輸入一字串:” );
6 gets(str);
7 printf(“ 輸入的字串為: %s”, str);
8 }
14
Ch9_5 輸出結果 (2/2)
• 程式執行結果
請輸入一字串: This is a pen
輸入的字串為: This is a pen
15
9-2 字串的輸入及輸出
9-2-2 字串的輸出 – printf( )
• 一次能輸出多個字串• 具格式化輸出的功能
– puts( ) • 一次只能輸出一個字串 • 不具格式化輸出的功能 • 每輸出一個字串, puts( ) 也將輸出一個跳列字
16
範例 Ch9_6 (1/2)
ch9_6 以 gets( ) 輸入字串,且以 puts( ) 輸出字串 1 #include<stdio.h>
2 void main( )
3 {
4 char input[20];
5 puts(“ 請輸入字串:” );
6 gets(input);
7 puts(input);
8 }
17
Ch9_6 輸出結果 (2/2)
• 程式執行結果
請輸入字串:This is a pen
This is a pen
18
9-3 其它字串的處理函數 • 使用前,需加入 string.h 的標頭檔
– strlen( ) : 計算字串長度– strcmp( ): 比較兩個字串– strcpy( ): 將字串一複製到字串二– strcat( ): 合併字串一及字串二 – toupper( ): 將字串內容轉換成大寫字母 – tolower( ): 將字串內容轉換成小寫字母
19
範例 Ch9_9 (1/2)
ch9_9 輸入一個字串,計算出該字串的長度 1 #include<string.h> /* 因使用 strlin( ) 函數 , 需叫用標頭檔 */
2 #include<stdio.h>3 void main( )4 {5 char str[30]; 6 int number;7 printf(" 請輸入一字串: ");8 gets(str); 9 number = strlen(str); /* 呼叫 strlen( ) 函數 , 求出 str 的長度 */
10 printf("\n 字串長度為: %d", number); 11 }
20
Ch9_9 輸出結果 (2/2)
• 程式執行結果
請輸入一字串: This is a pig
字串長度為: 13
21
9-3-2 strcmp( ) 函數 • 語法
– 整數型態變數 = strcmp( 字串陣列名稱一 , 字串陣列名稱二 );
• 說明– 整數型態變數
• 0 代表兩個字串相同•負數及正數皆表示為不相同字串
– strcmp( )
•會將字串一與字串二做一比較,看是否相同
22
範例 Ch9_10 (1/3)
ch9_10 設計一個程式,檢查輸入的字串是否相同 1 #include<stdio.h>2 #include<string.h> /* 因使用 strcmp( ) 函數 , 需叫用標頭檔 */
3 void main( )4 {5 char str1[20];6 char str2[20];7 int i;8 printf(" 請輸入第一個字串: ");9 gets(str1);
23
範例 Ch9_10 (2/3)
10 printf(" 請輸入第二個字串: ");
11 gets(str2);
12 i = strcmp(str1, str2); /* 比較 str1,str2 字串是否相同 */
13 if(i == 0)
14 printf(" 輸入的兩個字串為相同的字串 !");
15 else
16 printf(" 輸入的兩個字串為不相同的字串 !");
17 }
24
Ch9_10 輸出結果 (3/3)
• 程式執行結果
請輸入第一個字串: computer
請輸入第二個字串: computer
輸入的兩個字串為相同的字串 !
請輸入第一個字串: computer
請輸入第二個字串: mouse
輸入的兩個字串為不相同的字串 !
25
9-3-3 strcpy( ) 函數 •語法
– strcpy( 字串 1, 字串 2);
•說明– 字串 1 :將要被複製成跟字串 2 相同內容的字串– 字串 2 :將要複製給字串 1 的字串 – 此函數可將字串 2 變數的內容拷貝到字串 1 的內容
( 包含空字元 )
26
範例 Ch9_11(1/2) ch9_11 使用者輸入一個字串,程式將以該字串覆蓋原程式內定的字串 1 #include<stdio.h>2 #include<string.h> /* 因使用 strcpy( ) 函數 , 需叫用標頭
檔 */ 3 void main( )4 {5 char str1[30] = ”This is an original string”, str2[30];6 printf(" 請輸入一字串: ");7 gets(str2); 8 printf(“ 原先內定字串 1 的內容為: %s\n”, str1);9 strcpy(str1, str2); 10 printf(" 複製過後的字串 1 內容為: %s", str1); 11 }
27
Ch9_11 輸出結果 (2/2)
• 程式執行結果
請輸入一字串: This is my input
原先內定字串 1 的內容為: This is an original string
複製過後的字串 1 內容為: This is my input
28
9-3-4 strcat( ) 函數
•語法– strcat(str1, str2);
•說明– str2 將會覆蓋住 str1 字串的結束字元 '\0' ,且保留本身的結束字元 '\0'
29
範例 Ch9_12(1/2)
ch9_12 使用 strcat( ) 函數,將兩個字串合併為一,並輸出1 #include<stdio.h>
2 #include<string.h> /* 因使用 strcat( ) 函數 , 需叫用標頭檔 */
3 void main( )
4 {
5 char str1[20]=”Taiwan ”;
6 char str2[ ]=”University”;
7 printf(“ 合併前 str1 內容為: %s str2 內容為: %s\n“, str1, str2);
8 strcat(str1, str2);
9 printf(“ 合併後 str1 內容為: %s str2 內容為: %s\n”, str1, str2);
10 }
30
Ch9_12 輸出結果 (2/2)
• 程式執行結果
合併前 str1 內容為: Taiwan str2 內容為: University
合併後 str1 內容為: Taiwan University str2 內容為: University
31
9-3-5 toupper( ) 函數及 tolower( ) 函數 •語法
– 陣列名稱 [ 索引值 ] = tolower( 陣列名稱 [ 索引值 ] );
– 陣列名稱 [ 索引值 ] = toupper( 陣列名稱 [ 索引值 ] );
•說明– 需加入 ctype.h 的標頭擋– toupper( ) 函數可以將字元強制轉換成大寫– tolower( ) 函數則可以將字元強制轉換成小寫
32
範例 Ch9_13(1/3) ch9_13 將輸入的小寫字串轉換成大寫,並將輸入的大寫字串轉換成小寫 1 #include<stdio.h>
2 #include<ctype.h> /* 使用 toupper( ) 函數及 tolower( ) 函數*/
3 void main( )4 {5 int i;6 char str1[10];7 char str2[10];8 printf(“ 請輸入字串一: ” );9 gets(str1);10 printf(“ 請輸入字串二: ” );11 gets(str2);
33
範例 Ch9_13(2/3)
12 for (i = 0 ; str1[i] != ’\0’; i++)
13 str1[i] = tolower( str1[i] );
14 for (i = 0 ; str2[i] != ’\0’; i++)
15 str2[i] = toupper( str2[i] );
16 printf(“ 大寫轉換成小寫: %s\n“, str1);
17 printf(“ 小寫轉換成大寫: %s “, str2);
18 }
34
Ch9_13 輸出結果 (3/3)
• 程式執行結果
請輸入字串一: ABC
請輸入字串二: efg
大寫轉換成小寫: abc
小寫轉換成大寫: EFG