1.字符集
在认识字符串之前先要了解什么是字符,在c++语言中字符集由下述字符构成:
英文字符:A~Z,a~z;
数字字符:0~9;
特殊字符:!# % & ^ * _(下划线) + - / = \ < > ~ ' " , . : ; ? ( ) [ ] { }
2.字符串
字符串常量是用一对双引号(英文)括起来的字符序列,例如"ABC123!#,."。其在内存中存放的形式是,按串中字符的排列次序顺序存放,每个字符占一个字节,并在结尾处用'\0'作为结尾标记。
#include <stdio.h>
#include<string.h>
int main()
{
char arr[] = { "China!" };
int len = strlen(arr);
printf("%s\n",arr);
printf("%d\n", len);
return 0;
}
这里通过用双引号的形式将字符串存入数组中,数组会自动生成'\0',通过求数组长度可以看到只有6个字符,而监视可以很清楚的看到是存在'\0'字符的,但不算入字符长度。
还有一种创建字符串的方式,将每个字符单独用单引号括起来,字符中间用逗号隔开,这种需要注意的是要自己加上'\0'结束字符,否则会随机录入后续内存中存在的任意字符,如:
int main()
{
char arr[] = { 'C','h','i','n','a','!' };
char arr2[] = { 'C','h','i','n','a','!','\0'};
int len = strlen(arr);
int len2 = strlen(arr2);
printf("%s\n",arr);
printf("%d\n", len);
printf("%s\n", arr2);
printf("%d\n", len2);
return 0;
}
这里可以对比两种录入方式的区别,用单引号分别录入时,不输入结束字符的话,数组会继续录入内存中存在的字符,导致字符长度随机,且这里会有警告。
(大胆猜测一波,这两个数组在内存中存的地址相近,导致第一次结束时的China!可能是第二个数组的)
3.转义字符
转义字符是通常用\加上某个字符表达一些特殊的含义,如上述输出是经常用'\n'来输出换行,通常用来表示一般字符不便于表达的一些控制代码,广义上说可以用转义字符来表示字符集中任意一个字符,这里引入ASCII码,通常可以用\ddd,d表示八进制中的数共3位,或者\xdd,d表示16位进制中的数共两位,如'\077'表示问号,也可以用’\x3F‘。
int main()
{
printf("8进制表示问号\077\n");
printf("16进制表示问号\x3F");
return 0;
}
具体的一些转义字符就不给出了,需要用时可自行百度,熟练掌握后自然可以记忆。
因为转义字符是用\来表达,那如果在字符串中需要表示\时需要用‘\\’将转义字符转义(禁止套娃),以及'\?'表示‘?’,例如:
int main()
{
char arr[] = { "\\?\?\!" };
int len = strlen(arr);
printf("%s\n",arr);
printf("%d\n",len);
return 0;
}
3.注释
在C++中有两种注释方法,一直是沿用C语言的注释用“/*”和“*/”来成段的进行注释,但其弊端是不能进行嵌套,当成段注释代码时,若其中有其他注释很容易出现错误。
所以现在一般用“//’“,来注释,从”//“开始,到它所在行的行尾,所有字符都被作为注释处理。
int main()
{
char arr[] = { "\\?\?\!" };//创建一个字符串
int len = strlen(arr);//求该字符串长度
printf("%s\n",arr);//输出该字符串
printf("%d\n",len);//输出该字符串长度
return 0;
}
如以上代码添加了注释,并不影响代码本身的表达,且让人更容易理解代码所表达的内容,在写复杂代码时,注释是非常有必要的。