这次和大家分享下C-风格的字符串的一些细小知识点,字符串很简单,大家经常用肯定都很熟悉,不过还是会有一些基础但是容易被忽略的一些细节,而且华为软件机试经常会有关于字符串的题,所以觉得有必要和大家分享一下自己的总结。
字符串初始化:
C-风格的字符串具有一种特殊的性质,它必须以空字符结尾,即\0,其ASCII码为0,用来标记字符串的结尾,如:
char ming[9] = {'c','h','a','r','m','i','n','g','\0'};
这个值得注意,C++的很多处理字符串的函数,包括cout,它们逐个处理字符串中的字符,直到到达空字符才停下。如果最后一个字符不是空字符,使用cout函数的话,将打印char数组内的9个字母,并接着将内存中随后各个字节解释为要打印的字符,直到遇到空字符为止,很可怕吧。
我们也可以这样初始化字符串,使用双引号,而不是繁琐的单引号:
char ming[] = "charming";
用双引号括起的字符串隐式地包括结尾的空字符,因此不用显示的包含它,很方便吧。
我们初始化数组的时候应该确保数组足够大,能储存字符串的所有字符(包括空字符)。让数组比字符串长一些并没有坏处,顶多浪费一些空间而已。
记住,不能以下面两种方式将字符常量赋给char型变量:
char shirt_size = 'S';
char shirt_size = "S";
第一种可以成功赋值,但其将S的ASCII码的值,即83,赋给了shirt_size;
第二种则不能成功赋值,因为“S”实际表示字符串所在的内存地址。
字符串长度:
char ming[15] = "charming";
int n = sizeof ming; //n为整个数组的长度,n为15
int m = strlen(ming); //m为字符串长度,m为8
先写这么多,吃饭去了,也祝各位吃好!