2012年3月計(jì)算機(jī)二級(jí)C語言考點(diǎn)歸納:字符串

字號(hào):

2012年3月1日第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格式描述符;
    ②使用getchar和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ū)捜纾?BR>    printf(″%6s″,str);/*若字符串中字符多于6個(gè),仍將全部輸出*/
    printf(″%-6s″,str);/*只輸出前6個(gè)字符,多余的不輸出*/
    ②使用gets和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)的庫函數(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)換成大寫字母