作者:余小小
日期:2021-10-02
字符串概念
-
字符串实际上是使用 null 字符 \0 终止的一维字符数组,这里null和\0实际上也叫做字符串的结束符号,表示我一段话到此位置的意思哦
-
这个 null 字符 \0 要认识是干啥的哦,再其他高级语言中,其实是隐藏了的,叫做结束字符
-
遇到第一个结束字符,则字符串就取到改区域的的字符,后面的就不会考虑了,可以说结束字符就是一把刀,一刀下去后面的都不要了
下面的声明和初始化创建了一个 yxqz 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 yxqz 的字符数多一个。应为多了一个结束字符
char demo[] = {'y', 'x', 'q', 'z', '\0'};
#include <stdio.h>
int main() {
char demo[] = {'y', 'x', 'q', 'z', '\0'};
int i;
for (i = 0; i < 4; i++) {
printf("数组中的元素:%d\n", demo[i]);
}
return 0;
}
-
我用的d来接收,因为我用s接收,我这里会进入到debug模式,暂时不纠结这里,所以能看到值就行了
-
所以说,用动态的初始化数组,可以不用规定[]中的值,也可以规定,但是一定要合理,不然装不下就尴尬了
-
最好考试的时候,int在前面先定义,虽然写在for循环中,也是可以编译的,但是有一些低级的编译器没法识别汇编有错误
定义字符串
-
用双引号
-
不是花括号的对象方式
-
是动态的方式 ,不用规定空间范围
-
当然,你规定了空间范围,也是可以的
-
这里c语言会自动添加结束符的
char yyds[] = "yyds";
char yyds[99] = "yyds";
直接定义字符串,也是可以的 ,但是一定要注意,用双引号
#include <stdio.h>
int main() {
char demo[] = {'y', 'x', 'q', 'z', '\0'};
char yyds[] = "yyds";
int i;
for (i = 0; i < 4; i++) {
printf("数组中的元素:%d\n", demo[i]);
printf("yyds数组中的元素:%d\n", yyds[i]);
}
return 0;
}
测试字符串长度
-
可以看到,手动挡的,会将结束符也算进去
-
自动挡的,没有将结束符算进去,所以要注意,是不是用到双引号来定义的字符串
int main() {
char demo[] = {'y', 'x', 'q', 'z', '\0'};
char yyds[99] = "yyds";
printf("demo数组长度:%d\n",sizeof(demo) );
printf("yyds数组长度:%d\n",sizeof(yyds) );
return 0;
}
常用的字符串api
字符串名字,装的是字符串地址值,和数组名字一样哦。
-
strcmp: string compare
-
strcat: string catenate
-
strcpy: string copy
-
strlen: string length
-
strlwr: string lowercase
-
strupr: string upercase
序号 | 函数 & 目的 |
---|---|
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。 |
5 | 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
-
操作字符串,一定要引入#include <string.h>这个库
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[14] = "runoob";
char str2[14] = "google";
char str3[14];
int len ;
/* 复制 str1 到 str3 */
strcpy(str3, str1);
printf("strcpy( str3, str1) : %s\n", str3 );
/* 连接 str1 和 str2 */
strcat( str1, str2);
printf("strcat( str1, str2): %s\n", str1 );
/* 连接后,str1 的总长度 */
len = strlen(str1);
printf("strlen(str1) : %d\n", len );
return 0;
}
strlen 与 sizeof的区别
-
strlen 是函数,sizeof 是运算操作符,二者得到的结果类型为 size_t,即 unsigned int 类型。
-
sizeof 计算的是变量的大小,不受字符 \0 影响;
-
而 strlen 计算的是字符串的长度,以 \0
暂无评论内容