字元陣列與字串的問題

2021-05-27 15:30:11 字數 3541 閱讀 5914

6.3.1  字元陣列的逐個字元操作

[案例6.5]從鍵盤輸入乙個字串,回車鍵結束,並將字串在螢幕上輸出。

/*案例**檔名:al6_5.c*/

main()

i=0;

while(str!='\\x0d')

printf(\"%c\",str[i++]); /*逐次輸出字元陣列的各個元素*/

printf(\"\\n\");

getch(); /*程式暫停*/

}1.字元陣列的定義

1維字元陣列,用於儲存和處理1個字串,其定義格式與1維數值陣列一樣。

2維字元陣列,用於同時儲存和處理多個字串,其定義格式與2維數值陣列一樣。

2.字元陣列的初始化

字元陣列的初始化,可以通過為每個陣列元素指定初值字元來實現。

3.字元陣列的引用

字元陣列的逐個字元引用,與引用數值陣列元素類似。

(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」格式符。另外,從鍵盤上輸入字元時,無需輸入字元的定界符──單引號;輸出時,系統也不輸出字元的定界符。

6.3.2  字元陣列的整體操作

[案例6.6]  字元陣列的整體輸入與輸出。

/*案例**檔名:al6_6.c*/

/*功能:將2維字元陣列進行初始化,並在螢幕上輸出*/

main()

;for(i=0;i<5;i++)

printf(\"\\n%s\\t\",name);      /*name代表該行陣列元素的首位址*/

getch();

} 1.字串及其結束標誌

所謂字串,是指若干有效字元的序列。c語言中的字串,可以包括字母、數字、專用字元、轉義字元等。

c語言規定:以『\\0』作為字串結束標誌(『\\0』代表ascii碼為0的字元,表示乙個「空操作」,只起乙個標誌作用)。因此可以對字元陣列採用另一種方式進行操作了──字元陣列的整體操作。

注意:由於系統在儲存字串常量時,會在串尾自動加上1個結束標誌,所以無需人為地再加1個。

另外,由於結束標誌也要在字元陣列中占用乙個元素的儲存空間,因此在說明字元陣列長度時,至少為字串所需長度加1。

2.字元陣列的整體初始化

字串設定了結束標誌以後,對字元陣列的初始化,就可以用字串常量來初始化字元陣列。

3.字元陣列的整體引用

(1)字串的輸入

除了可以通過初始化使字元陣列各元素得到初值外,也可以使用scanf()函式輸入字串。

(2)字串的輸出

printf()函式,不僅可以逐個輸出字元陣列元素,還可以整體輸出存放在字元陣列中的字串。

6.3.3  常用的字串處理函式

字串標準函式的原型在標頭檔案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)呼叫方式:strcmp(字串1 ,字串2)

其中「字串」可以是串常量,也可以是1維字元陣列。

(2)函式功能:比較兩個字串的大小。

如果:字串1=字串2,函式返回值等於0;

字串1《字串2,函式返回值負整數;

字串1>字串2,函式返回值正整數。

(3)使用說明

1)如果乙個字串是另乙個字串從頭開始的子串,則母串為大。

2)不能使用關係運算子「==」來比較兩個字串,只能用strcmp() 函式來處理。

[案例6.7]  gets函式和strcmp函式的應用。

/*案例**檔名:al6_7.c*/

/*功能:簡單密碼檢測程式*/

#include  \"stdio.h\"

main()

/*輸入正確密碼所進入的程式段*/

}4.拷貝字串──strcpy()函式

(1)呼叫方式:strcpy(字元陣列, 字串)

其中「字串」可以是串常量,也可以是字元陣列。

(2)函式功能:將「字串」完整地複製到「字元陣列」中,字元陣列中原有內容被覆蓋。

(3)使用說明

1)字元陣列必須定義得足夠大,以便容納複製過來的字串。複製時,連同結束標誌'\\0'一起複製。

2)不能用賦值運算子「=」將乙個字串直接賦值給乙個字元陣列,只能用strcpy()函式來處理。

5.連線字串──strcat()函式

(1)呼叫方式:strcat(字元陣列, 字串)

(2)函式功能:把「字串」連線到「字元陣列」中的字串尾端,並儲存於「字元陣列」中。「字元陣列」中原來的結束標誌,被「字串」的第乙個字元覆蓋,而「字串」在操作中未被修改。

(3)使用說明

1)由於沒有邊界檢查,程式設計者要注意保證「字元陣列」定義得足夠大,以便容納連線後的目標字串;否則,會因長度不夠而產生問題。

2)連線前兩個字串都有結束標誌'\\0',連線後「字元陣列」中儲存的字串的結束標誌'\\0'被捨棄,只在目標串的最後保留乙個'\\0'。

6.求字串長度──strlen()函式(len是length的縮寫)

(1)呼叫方式:strlen(字串)

(2)函式功能:求字串(常量或字元陣列)的實際長度(不包含結束標誌)。

7.將字串中大寫字母轉換成小寫──strlwr()函式

(1)呼叫方式:strlwr(字串)

(2)函式功能:將字串中的大寫字母轉換成小寫,其它字元(包括小寫字母和非字母字元)不轉換。

8.將字串中小寫字母轉換成大寫──strupr()函式

(1)呼叫方式:strupr(字串)

(2)函式功能:將字串中小寫字母轉換成大寫,其它字元(包括大寫字母和非字母字元)不轉換.

字元陣列與字串

字元陣列與字串 字串就是字元的序列,可看作單個資料項。定義在雙引號之間的字元組 雙引號除外 就是乙個字串常量。例 man is abviously made to think 字串變數的宣告與初始化 c語言並不支援字串資料型別。但是,它允許作為字元陣列來表示字串。因此在c語言中,字串變數就是任何合法...

字元陣列與字串

字元陣列與字串 6.3.1 字元陣列的逐個字元操作 案例6.5 從鍵盤輸入乙個字串,回車鍵結束,並將字串在螢幕上輸出。main i 0 while str x0d printf c str i printf n getch 1 字元陣列的定義 1維字元陣列,用於儲存和處理1個字串,其定義格式與1維數...

字元陣列與字串

char str 6 char str2 6 world printf s n str scanf s str2 for i 0 str i 0 i 說明 系統為了明確區分記憶體上的字串從屬關係,它會去尋找空字元,ascii嗎為0 我們稱為結束符,從陣列名指標位一直往後找,知道找到空字元為止。既然字...