[toc]
字符串
定义
字符串的本质就是一个字符数组。
- 注意:
- 字符串变量和普通的字符数组有一定的区别
- 字符串必须以\0结尾(作为字符串的结束符号),所以字符串变量的元素比字符数组的元素个数多一个\0
- 字符串以\0结尾,没有\0就不是字符串,而是字符数组
char str[] = "dfasf";
初始化
char str1[] = "sdfa";
char str2[] = {'s', 'd', 'f', 'a', '\0'};
部分初始化中,没有被赋值的元素默认是0。\0对应的ASCII值为0
char str3[10] = {'s', 'a', 'f', 'a', 'r'};
char str4[3] = {'s', 'a', 'f'};//该方式不是字符串,而是字符数组,因为没有\0
char str5[] = {'s', 'a', 'f'};
输出
- printf()中使用%s
- 优点:可以自定义格式化输出的字符串
- 弊端:如果想换行,必须加上\0
- puts()
- 优点:可以自动换行
- 弊端:不可以自定义格式,只能原样输出
printf("str = %s\n", str);
puts(str);
%s的原理:从传入的“地址”开始逐个取出,直到遇到“\0”为止。
输入
- scanf
- scanf接收字符串,会以空格、tab、回车作为结束符号,也就是说利用scanf接收字符串时,字符串中不能出现空格、tab、回车
char buf1[10];
scanf("%s", buf1);
- gets
- 使用gets接收字符串,系统会提示我们正在使用一个不安全的方法接收字符。因为输入的字符串元素个数可能会越界。
- 优点:可以在字符串中输入空格、tab
char buf2[10];
gets(buf2);
常用方法
拼接
char str1[10] = "safari";
char str2[10] = "cool";
strcat(str1, str2);
size_t catSize = sizeof(str1) / sizeof(str1[0]) - strlen(str1) - 1;
strncat(str1, str2, catSize);
- strcat(dest, src)
- dest:目标
- src:源
- 将src中的数据拼接到dest后面
- 注意:dest必须是一个数组,并且数组的长度必须大于拼接之后的长度
- strncat(char *, const char *, size_t)
- char *:目标
- const char *:源
- size_t:需要拼接的个数
拷贝
strcpy(str1, str2);
size_t cpySize = sizeof(str1) / sizeof(str1[0]) - strlen(str1) - 1;
strncpy(str1, str2, cpySize);
- strcpy(char *, const char *)
- char *:目标
- const char *:源
- strcpy函数会将源的数据拷贝到目标中,并且会覆盖掉目标中原有的数据。
- 目标的容积必须能够存放源的数据。
- strncpy(char *, const char *, size_t)
- char *:目标
- const char *:源
- size_t:需要拼接的个数
- 注意:拷贝操作是逐个替换,拷贝了几个就替换几个
比较
int res = strcmp(str1, str2);
printf("res = %i\n, res");
strcmp会对传入的字符串进行比较,比较完毕后会返回一个整型的值给我们
原理:取出字符串中的每一个字符进行逐个比较,如果发现不相等就不会继续往下比较
- 如果该值等于0,那么证明两个字符串相等
- 如果该值大于0,那么就是升序的,str1小于str2
- 如果该值小于0,那么就是降序的,str1大于str2
网友评论