c語言中的字元陣列與字串

2021-06-18 00:49:09 字數 4278 閱讀 7021

一、字元陣列的定義

一維字元陣列:用於儲存和處理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個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...