官术网_书友最值得收藏!

  • 王道程序員求職寶典
  • 王道論壇組編
  • 548字
  • 2018-12-28 17:12:22

2.2 C風(fēng)格字符串

第1章在介紹特殊的字符數(shù)組時(shí),已經(jīng)簡(jiǎn)要介紹過(guò)C語(yǔ)言中的風(fēng)格字符串,本節(jié)就C語(yǔ)言中的風(fēng)格字符串的常用操作簡(jiǎn)要介紹。

C++語(yǔ)言通常通過(guò)char*/const char*類型的指針來(lái)操縱C語(yǔ)言中的風(fēng)格字符串。一般來(lái)說(shuō),我們使用指針的算術(shù)操作來(lái)遍歷C風(fēng)格字符串,每次對(duì)指針進(jìn)行測(cè)試并遞增1,直到到達(dá)結(jié)束符null為止:

            const char *cp="some value";
            while (*cp) {
            // do something to *cp
            ++cp;
            }

例1:下列代碼的輸出是什么?

                char x='\0';                    printf("%d", x);//0
                char y='0';                     printf("%d", y);//48
                char z='a';                     printf("%d", z);//65
                char a='A';                     printf("%d", a);//97

解答:可見(jiàn)\0會(huì)被轉(zhuǎn)化為十進(jìn)制的0輸出,這也是為什么可以使用while (*cp)的原因(const char*cp="some value";),此時(shí)字符串末尾的\0意義同0,我們知道在c/c++中0被轉(zhuǎn)化成bool類型的false。

例2:下面函數(shù)的功能是(  )?(2012·優(yōu)酷土豆)

            int fun(char *x){
                char *y=x;
                while(*y++);
                return (y-x-1);
            }

A.求字符串的長(zhǎng)度

C.將字符串x復(fù)制到字符串y

B.比較兩個(gè)字符串的大小

D.將字符串x連接到字符串y后面

解答:A。while循環(huán)直到遇到字符串結(jié)尾的null字符才退出。然后y-x-1即得字符串長(zhǎng)度,可見(jiàn)指向同一個(gè)字符串的指針可做算術(shù)運(yùn)算。

例3:What is the result of the following program?(2012·微軟)

            char* f(char *str, char ch){
                char *it1=str;
                char *it2=str;
                while (*it2 != '\0') {
                    while (*it2 == ch) {
                        it2++;
                    }
                    *it1++=*it2++;
                }
                return str;
            }
            void main(int argc, char *argv[]){
                char *a=new char[10];
                strcpy(a, "abcdcccd ");
                cout << f(a, 'c');
                delete[] a;
            }

A.abdcccd

B.abdd

C.abcc

D.abddcccd

E.Access Violation

解答:D。其中strcpy將在下節(jié)講解。cout逐個(gè)地處理字符串中的字符,直到到達(dá)空字符為止,本題中最后一個(gè)'\0'的位置未發(fā)生變化,所以答案不是B,而是D。

主站蜘蛛池模板: 祁门县| 禹州市| 林口县| 金昌市| 锡林郭勒盟| 深水埗区| 都江堰市| 大厂| 平泉县| 桐城市| 崇仁县| 新兴县| 洱源县| 柘城县| 广南县| 东兰县| 灵川县| 内黄县| 利辛县| 饶河县| 岫岩| 景泰县| 兰西县| 桃园市| 庆阳市| 社旗县| 达尔| 崇阳县| 澜沧| 荆门市| 读书| 新蔡县| 四子王旗| 富平县| 香港 | 大关县| 辉县市| 金川县| 元朗区| 唐海县| 北安市|