計(jì)算機(jī)二級(jí)C語言字符串考點(diǎn)歸納
第10章 字符串考點(diǎn)歸納
10.1 字符串與字符數(shù)組
1.字符數(shù)組的定義
定義方法與前面介紹的類似,只是將數(shù)組定義為字符型即可。例如:
char c[10];
這里定義了一個(gè)包含10個(gè)元素的字符數(shù)組c。
2.字符數(shù)組的初始化
對(duì)字符數(shù)組初始化,可以采用以下方法:
(1)逐個(gè)字符賦給數(shù)組中各元素;
(2)用字符串常量使字符數(shù)組初始化。
3.字符串
在C語言中,字符串是作為字符數(shù)組來處理的,字符串可以存放在字符型一維數(shù)組中,故可以把字符型一維數(shù)組作為字符串變量。
字符串常量是用雙引號(hào)括起來的一串字符。
C語言中約定用′\0′作為字符串的結(jié)束標(biāo)志,它占內(nèi)存空間,但不計(jì)入串的長(zhǎng)度,′\0′的代碼值為0。
系統(tǒng)對(duì)字符串常量也自動(dòng)加一個(gè)′\0′作為結(jié)束符。例如″c language″共有10個(gè)字符,但在內(nèi)存中占11個(gè)字節(jié),最后一個(gè)字節(jié)存放′\0′。
4.字符數(shù)組的輸入輸出
(1)逐個(gè)字符輸入和輸出
、僭跇(biāo)準(zhǔn)輸入輸出printf和scanf中使用%c格式描述符;
、谑褂胓etchar和putchar函數(shù)。例如:
for(i=0;i<10;i++)
scanf(″%c″,&str[i]); /*或str[i]=getchar();*/
str[i]=′\0′;/*人為加上串結(jié)束標(biāo)志*/
for(i=0;i<10;i++)
printf(″%c″,str[i]);/*或putchar(str[i]);*/
(2)字符串整體輸入輸出
①在標(biāo)準(zhǔn)輸入輸出函數(shù)printf和scanf中使用%s格式描述符;
輸入形式:
char str[6];
scanf(″%s″,str);
其中 str為字符數(shù)組名,代表著str字符數(shù)組的起始地址,輸入時(shí)系統(tǒng)自動(dòng)在每個(gè)字符串后加入結(jié)束符′\0′。若同時(shí)輸入多個(gè)字符串,則以空格或回車符分隔。
輸入形式:
printf(″%s″,str);
輸字符串時(shí),遇第一個(gè)′\0′即結(jié)束。但可人為控制輸出串所占的域?qū)捜纾?
printf(″%6s″,str);/*若字符串中字符多于6個(gè),仍將全部輸出*/
printf(″%-6s″,str);/*只輸出前6個(gè)字符,多余的不輸出*/
、谑褂胓ets和puts函數(shù)輸入輸出一行
gets函數(shù)用來從終端鍵盤讀字符,直到遇換行符為止,換行符不屬字符串的內(nèi)容。
調(diào)用形式:
gets(str);
str為字符數(shù)組名或字符指針,字符串輸入后,系統(tǒng)自動(dòng)將′\0′置于串尾代替換行符。若輸入串長(zhǎng)超出數(shù)組定義長(zhǎng)度時(shí),系統(tǒng)報(bào)錯(cuò)。
Puts函數(shù)用來把字符串的內(nèi)容顯示在屏幕上。
調(diào)用形式:
puts(str);
str的含義同上。輸出時(shí),遇到第一個(gè)′\0′結(jié)束并自動(dòng)換行,字符串中可以含轉(zhuǎn)義字符。
10.2 字符串的指針以及指向字符串的指針變量
1.用指針方法實(shí)現(xiàn)一個(gè)字符串的存儲(chǔ)和運(yùn)算
如:
char * strp=″china″;
此處定義了一個(gè)字符指針變量strp,變量中存放的是字符串第一個(gè)字符的地址。
C語言對(duì)字符串常量是按字符數(shù)組處理的,它實(shí)際上在內(nèi)存開辟了一個(gè)字符數(shù)組用來存放字符串變量,并把字符串首地址賦給字符指針變量strp。
在輸出時(shí)用
printf(″%s\n″,strp);
通過字符數(shù)組名或字符指針變量可以輸出一個(gè)字符串。而對(duì)一個(gè)數(shù)值型數(shù)組,是不能企圖用數(shù)組名輸出它的全部元素的。
2.字符指針變量與字符數(shù)組
雖然用字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符串的存儲(chǔ)和運(yùn)算,但它們二者之間是有區(qū)別的,不應(yīng)混為一談,主要有以下幾點(diǎn):
(1)字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是地址(字符串的首地址),決不是將字符串放到字符指針變量中。
(2)對(duì)字符數(shù)組只能對(duì)各個(gè)元素賦值,不能用以下辦法對(duì)字符數(shù)組賦值。
Char str[14];
str=″I love China!″;
而對(duì)字符指針變量,可以采用下面方法賦值:
char *a;
a=″I love China!″;
但注意賦給a的不是字符,而是字符串的首地址。
(3)賦初值時(shí),對(duì)以下的變量定義和賦初值:
char *a=″I love China!″;
等價(jià)于:
char *a;
a=″I love China!″;
而對(duì)數(shù)組初始化時(shí):
static char str[14]={″I love China!″};
不能等價(jià)于
char str[14];
str[]={″I love China!″};
即數(shù)組可以在變量定義時(shí)整體賦初值,但不能在賦值語句中整體賦值。
(4)在定義一個(gè)數(shù)組時(shí),在編譯時(shí)即已分配內(nèi)存單元,有確定的地址。而定義一個(gè)字符指針變量時(shí),給指針變量分配內(nèi)存單元,在其中可以放一個(gè)地址值,就是說,該指針變量可以指向一個(gè)字符型數(shù)據(jù),但如果未對(duì)它賦予一個(gè)地址值,這時(shí)該指針變量并未具體指向哪一個(gè)字符數(shù)據(jù)。
(5)指針變量的值是可以改變的。
3.字符串處理函數(shù)
C語言中沒有對(duì)字符串進(jìn)行合并、比較和賦值的運(yùn)算符,但幾乎所有版本的C語言中都提供了有關(guān)的庫(kù)函數(shù)。例如:
(1)strcat函數(shù):連接兩個(gè)字符數(shù)組中的字符串
(2)strcpy函數(shù):字符拷貝函數(shù)
(3)strcmp函數(shù):字符比較函數(shù)
(4)strlen函數(shù):測(cè)試字符串長(zhǎng)度的函數(shù)
(5)strlwr函數(shù):將字符串中大寫字母轉(zhuǎn)換成小寫字母
(6)strupr函數(shù):將字符中小寫字母轉(zhuǎn)換成大寫字母