- 王道程序員求職寶典
- 王道論壇組編
- 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。