一、字元陣列的定義
一維字元陣列:用於儲存和處理1個字串,其定義格式與一維數值陣列一樣。
char str[20];
二維字元陣列:用於同時儲存和處理多個字串,其定義格式與二維數值陣列一樣。
char country[10][20];
country:
第i個字串
二.字元陣列的初始化
字元陣列的初始化.
1.可以通過為每個陣列元素指定初值字元來實現。
char str[10]=;
char country[10][20]=;
注意:上述這種字元陣列的整體賦值只能在字元陣列初始化時使用,不能用於字元陣列的賦值,字元陣列的賦值只能對其元素一一賦值,下面的賦值方法是錯誤的
char str[15];
不是用單個字元作為初值,而是用乙個字串(注意:字串的兩端是用雙引號「」而不是單引號『』括起來的)作為初值。
『a』 「a」區別
三、字元陣列的引用
字元陣列的逐個字元引用,與引用數值陣列元素類似。
(1)字元陣列的輸入
除了可以通過初始化使字元陣列各元素得到初值外,也可以使用getchar()或scanf()函式輸入字元。
例如:char str[10];
…… for(i=0; i<10; i++)
…… (2)字元陣列的輸出
字元陣列的輸出,可以用putchar()或printf()函式。
例如:char str[10]=\"c language\";
…… for(i=0; i<10; i++) printf(\"%c\", str);
printf(\"\\n\");
…… 注意:逐個字元輸入、輸出時,要指出元素的下標,而且使用「%c」格式符。另外,從鍵盤上輸入字元時,無需輸入字元的定界符──單引號;輸出時,系統也不輸出字元的定界符。
字元陣列的整體操作
[案例] 字元陣列的整體輸入與輸出。
/*功能:將2維字元陣列進行初始化,並在螢幕上輸出
*/ main()
; for(i=0;i<5;i++)
printf("\\n%s\\t",name); /*name代表該行陣列元素的首位址
*/ } 1
.字串及其結束標誌
所謂字串,是指若干有效字元的序列。c語言中的字串,可以包括字母、數字、專用字元、轉義字元等。
c語言規定:以
『\0』作為字串結束標誌(『\0』代表ascii碼為0的字元,表示乙個「空操作」,只起乙個標誌作用)。因此可以對字元陣列採用另一種方式進行操作了──字元陣列的整體操作。
注意:由於系統在儲存字串常量時,會在串尾自動加上1個結束標誌,所以無需人為地再加1個。
另外,由於結束標誌也要在字元陣列中占用乙個元素的儲存空間,因此在說明字元陣列長度時,至少為字串所需長度加1。
2.字元陣列的整體初始化
字串設定了結束標誌以後,對字元陣列的初始化,就可以用字串常量來初始化字元陣列。
3.字元陣列的整體引用
(1)字串的輸入
除了可以通過初始化使字元陣列各元素得到初值外,也可以使用scanf()函式輸入字串。
(2)字串的輸出
printf()函式,不僅可以逐個輸出字元陣列元素,還可以整體輸出存放在字元陣列中的字串。
四、常用的字串處理函式
字串標準函式的原型在標頭檔案string.h中。
1.輸入字串──gets()函式
(1)呼叫方式:gets(字元陣列
) (2)函式功能:從標準輸入裝置(stdin)──鍵盤上,讀取1個字串(可以包含空格),並將其儲存到字元陣列中去。
(3)使用說明
1)gets()讀取的字串,其長度沒有限制,程式設計者要保證字元陣列有足夠大的空間,存放輸入的字串。
2)該函式輸入的字串中允許包含空格,而scanf()函式不允許。
2.輸出字串──puts()函式
(1)呼叫方式:puts(字元陣列
) (2)函式功能:把字元陣列中所存放的字串,輸出到標準輸出裝置中去,並用『\n』取代字串的結束標誌『\0』。所以用puts()函式輸出字串時,不要求另加換行符。
( 3)使用說明
1)字串中允許包含轉義字元,輸出時產生乙個控制操作。
2)該函式一次只能輸出乙個字串,而printf()函式也能用來輸出字串,且一次能輸出多個。
3.字串比較──strcmp()函式
(1)呼叫方式:intstrcmp(字串1 ,字串
2) 其中「字串」可以是串常量,也可以是1維字元陣列。
(2)函式功能:比較兩個字串的大小。
如果:字串1=字串2,函式返回值等於0;
字串1《字串2,函式返回值負整數;
字串1>字串2,函式返回值正整數。
(3)使用說明
1)如果乙個字串是另乙個字串從頭開始的子串,則母串為大。
2)不能使用關係運算子「==」來比較兩個字串,只能用strcmp() 函式來處理。
[案例] gets函式和strcmp函式的應用。
/*功能:簡單密碼檢測程式
*/ #include "stdio.h"
main()
/*輸入正確密碼所進入的程式段
*/ }
4.拷貝字串──strcpy()函式
(1)呼叫方式:strcpy(字元陣列, 字串
) 其中「字串」可以是串常量,也可以是字元陣列。
(2)函式功能:將「字串」完整地複製到「字元陣列」中,字元陣列中原有內容被覆蓋。
(3)使用說明
1)字元陣列必須定義得足夠大,以便容納複製過來的字串。複製時,連同結束標誌'\0'一起複製。
2)不能用賦值運算子「=」將乙個字串直接賦值給乙個字元陣列,只能用strcpy()函式來處理。
str=」hello world!」
錯誤5.連線字串──strcat()函式
(1)呼叫方式:strcat(字元陣列, 字串
) (2)函式功能:把「字串」連線到「字元陣列」中的字串尾端,並儲存於「字元陣列」中。「字元陣列」中原來的結束標誌,被「字串」的第乙個字元覆蓋,而「字串」在操作中未被修改。
(3)使用說明
1)由於沒有邊界檢查,程式設計者要注意保證「字元陣列」定義得足夠大,以便容納連線後的目標字串;否則,會因長度不夠而產生問題。
2)連線前兩個字串都有結束標誌'\0',連線後「字元陣列」中儲存的字串的結束標誌'\0'被捨棄,只在目標串的最後保留乙個'\0'。
6.求字串長度──strlen()函式(len是length的縮寫)
(1)呼叫方式:intstrlen(字串
) (2)函式功能:求字串(常量或字元陣列)的實際長度(不包含結束標誌)。
7.將字串中大寫字母轉換成小寫──strlwr()函式
(1)呼叫方式:strlwr(字串
) (2)函式功能:將字串中的大寫字母轉換成小寫,其它字元(包括小寫字母和非字母字元)不轉換。
8.將字串中小寫字母轉換成大寫──strupr()函式
(1)呼叫方式:strupr(字串
) (2)函式功能:將字串中小寫字母轉換成大寫,其它字元(包括大寫字母和非字母字元)不轉換。
典型示例
1、 以上函式功能自定義完成
題目:寫乙個函式,求乙個字串的長度,在main函式中輸入字串,並輸出其長度。
main()
int length(char p)
「hello」
2、字串與整數問題
(1)編寫程式,將輸入的數字字串轉換成乙個相應的整數。如輸入字串為「-1234」,得到整數-1234
1234 1234
3、求子串問題
題目:計算字串中子串出現的次數
str1:this is a book,that is a pen
str2:is
#include "string.h"
#include "stdio.h"
main()
}else
i++;
if(str[j]=='\0')
sum++;
j=0;
}printf("%d",sum);}
4.字串排序
輸入10個長度不超過20的字串,按字典順序從小到大輸出
(1) 分析:資料儲存 char country[10][20]
(2) 冒泡或選擇排序均可
(3) 交換兩個字串、字串比較等函式的使用
c語言中的字串與字元陣列
1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...
c語言中的字元陣列與字串
字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定為空字元 即 0 2 字元陣...
c語言中的字元陣列與字串
1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...