山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省
在C函數庫中提供了一些用來專門處理字符串的函數,使用方便。幾乎所有版本的C語言編譯系統都提供這些函數。下面介紹幾種常用的函數。
①puts函數
輸出字符串的函數
其一般形式為
puts(字符數組)
其作用是將一個字符串(以' 10 '結束的字符序列)輸出到終端。假如已定義str是一個字符數組名,且該數組已被初始化為“China”。則執行:
puts ( str );
其結果是在終端上輸出“China”。由于可以用printf函數輸出字符串,因此puts函數用得不多。
用puts函數輸出的字符串中可以包含轉義字符。例如:
char str = ( " China\nBeijing”);
puts ( str );
輸出:
China
Beijing
在用puts輸出時將字符串結束標志' \0 '轉換成' \ n ',即輸出完字符串后換行。
②gets函數
輸入字符串的函數
其一般形式為
gets(字符數組)
其作用是從終端輸入一個字符串到字符數組,并且得到一個函數值。該函數值是字符數組的起始地址。如執行下面的函數:
gets ( str );
如果從鍵盤輸入:
Computer
將輸入的字符串“Computer”送給字符數組str(請注意,送給數組的共有9個字符,而不是8個字符),返回的函數值是字符數組str的第一個元素的地址。一般利用gets函數的目的向字符數組輸入一個字符串,而不大關心其函數值。
注意:用puts和gets函數只能輸出或輸入一個字符串,不能寫成puts ( strl , str2 );gets ( str1?, str2 )
③strcat函數
字符串連接函數
其一般形式為
strcat(字符數組1,字符數組2)
strcat是STRing CATenate(字符串連接)的縮寫。其作用是把兩個字符數組中的字符串連接起來,把字符串2接到字符串1的后面,結果放在字符數組1中,函數調用后得到一個函數值——字符數組1的地址。例如:
char str1 [ 30 ] = {" People's Republic of"}?
char str2[ ]= ( " China”);
printf ( " % s”, strcat ( strl , str2 ) );
輸出:
People ' s Republic of China
說明:
( 1 )字符數組1必須足夠大,以便容納連接后的新字符串。本例中定義strl的長度為30,是足夠大的,如果在定義時改用
strl [ ] = {?" People ' s Republic of " },就會出問題,因長度不夠。
( 2 )連接前兩個字符串的后面都有' \0 ' ,連接時將字符串1后面的' \0 '取消,只在新串最后保留' \0 '。
④strcpy和strncpy函數
字符串復制函數
其一般形式為
strcpy(字符數組1,字符串2)
strcpy是STRingCoPY(字符串復制)的簡寫。它表示“字符串復制函數”,作用是將字符串2復制到字符數組1中去。例如:
char str1 [ 10 ],str2 [ ] = " China”;
strcpy ( strl,str2 );
執行后,strl的狀態如下:
C h i n \0 \0 \0 \0 \0
說明:
( 1 )字符數組1必須定義得足夠大,以便容納被復制的字符串2。字符數組1的長度不應小于字符串2的長度。
( 2 )“字符數組1”必須寫成數組名形式(如strl ),“字符串2”可以是字符數組名,也可以是一個字符串常量。例如:
strcpy ( strl , " China " ) ;作用與前面相同。( 3 )如果在復制前未對strl數組初始化或賦值,則str1各字節中的內容是無法預知的,復制時將str2中的字符串和其后的' \0 '一起復制到字符數組1中,取代字符數組1中的前面6個字符,最后4個字符并不一定是' \0 ',而是strl中原有的最后4個字節的內容。
( 4 )不能用賦值語句將一個字符串常量或字符數組直接給一個字符數組。字符數組名是一個地址常量,它不能改變值,正如數值型數組名不能被賦值一樣。如下面兩行都是不合法的:
strl = " China " ; / /企圖用賦值語句將一個字符串常量直接賦給一個字符數組
strl = str2;/ /企圖用賦值語句將一個字符數組直接賦給另一個字符數組
只能用strcpy函數將一個字符串復制到另一個字符數組中去。用賦值語句只能將一個字符賦給一個字符型變量或字符數組元素。如下面的語句是合法的:
char a [ 5 ],c1,c2;c1 = ' A ';
c2 = ' B ';
a [ 0 ] = ' C ' ;
a [ 1 ] = ' h ';
a [ 2 ] = ' i ';
a [ 3 ] = ' n ';
a [ 4 ] = ' a ';
( 5 )可以用strncpy函數將字符串2中前面n個字符復制到字符數組1中去。例如:
strncpy ( strl , str2 , 2 ) ;
作用是將str2中最前面2個字符復制到str1中,取代strl中原有的最前面2個字符。但是復制的字符個數n不應多于strl中原有的字符(不包括' \0 ')。
?