2.2 C风格字符串
第1章在介绍特殊的字符数组时,已经简要介绍过C语言中的风格字符串,本节就C语言中的风格字符串的常用操作简要介绍。
C++语言通常通过char*/const char*类型的指针来操纵C语言中的风格字符串。一般来说,我们使用指针的算术操作来遍历C风格字符串,每次对指针进行测试并递增1,直到到达结束符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
解答:可见\0会被转化为十进制的0输出,这也是为什么可以使用while (*cp)的原因(const char*cp="some value";),此时字符串末尾的\0意义同0,我们知道在c/c++中0被转化成bool类型的false。
例2:下面函数的功能是( )?(2012·优酷土豆)
int fun(char *x){ char *y=x; while(*y++); return (y-x-1); }
A.求字符串的长度
C.将字符串x复制到字符串y
B.比较两个字符串的大小
D.将字符串x连接到字符串y后面
解答:A。while循环直到遇到字符串结尾的null字符才退出。然后y-x-1即得字符串长度,可见指向同一个字符串的指针可做算术运算。
例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将在下节讲解。cout逐个地处理字符串中的字符,直到到达空字符为止,本题中最后一个'\0'的位置未发生变化,所以答案不是B,而是D。