1、字符串的定义(字符用char,字符串用string)
在计算机里,所有数据必须以数字的形式表示,字符也不例外。根据 ASCII 码表的规定,每个字符一个数字表示,而这个数字在 0-127 之间。在 C/C++里char/short/int 都可以表示整数,由于字符的数值范围较小,我们选用 char 型变量来代表字符。
如:
char c = 'aa';
char c= ' 1 ';
这些都是错误的字符表示方法,应为字符对应的单引号中只能出现一个字母,并且不能是汉字,不能有多余的空格出现
①字符的输出%c
②字符串的输出%s
char str[6] = "hello";
printf("string: %s \n", str);
③字符串的结束符
字符串的末尾必须为一个数字 0 作为结束符,它是一个字符串结束的标识。如果一串字母不以 0 结束,那它就不算是一个有效的字符串。
下面定义了一个字符数组,前 3 个字符是 b,a,d,但末尾并不是 0,那它不是一个有
效的字符串,在用 printf 输出的时候会有问题:
char buf [4] = { 'b' , 'a' , 'd' , -1 };
printf("Got: %s \n", buf);
控制台输出时,会打印出一些乱码字符
而如下的定义就是可行的,末尾为0
由于str[3] 是0,第一个输出abc
第二个输出def
str[7]是0,所以直接结束 ,第三个输出为空
2、strlen()计算出字符串的长度
3、字符串对应的路径输出(\和"之前都必须加上转义符\)
用printf 打印输出以下文本:文件路径: "e:\cprojects\example\test.c"
printf("文件路径: \"e:\\cprojects\\example\\test.c\"");
注意,\ 和 " 均需要转义,\和"之前都必须加上转义符\
这也解释了为什么定义文件名字符串的时候会出现两个斜杠的原因:
如下:\0的应用
4、字符串数组
char name[10] = "shaofa";
printf("%d, %d, %d \n", name[5], name[6], name[7]);
数组name,初始化为 's' 'h' 'a' 'o' 'f' 'a' 0 0 0 0
name[5] 为 'a' ,即97
name[6] 和 name[7] 为0
字符串赋值给数组,定义为char,将每个字符依次存入数组中
输出是%d,输出字符对应的ASCII码
①字符串数组的赋值
char name[10] = "shaofa";
name = "shaodong";
上面用法错误,数组的初试化可以直接用等号赋值,但是修改数组不能直接直接将字符串赋值给数组名,如果想修改name里的内容,可以用strcpy_s() 函数
#include <stdio.h>
#include <string.h>
int main()
{
char name[10] = "shaofa";
strcpy_s(name, 10, "shaodong"); // 修改数组name的内容
getchar();
return 0;
}
②数组长度必须大于字符串长度
char str[4] = "shao";
printf("值为: %s \n", str);
数组太小,数组长度至少字符串长度+1。此处,字符串 "shao" 长度为4,所以数组长度至少为5。否则,末尾为0作为结束标识,它就不是一个合格的字符串,上述打印中会有乱码。
5、字符串操作
①截取
当文件名不确定时长度只能此种方法,第二个参数对应的是截取 结束的地方
②分割
分割第一次取出192,分割第二次取出168.0.1
③字符串拼接
+ 号拼接字符串