定义字符是char ,一定是单引号,每次只能赋值一个字符
【单引号和双引号在C语言中用于创建两种不同的数据类型】
如果希望使用能够容纳不止一个字符的变量,那就要用到字符数组
ASCII表
?
字符数组
char c[6]={'h','e','l','l','o'} //这里为什么申请5个空间呢,因为字符数组还会有一个'\0'字符占位,所以5个长度的字符需要6个存储空间
字符数组存储字符串,必须存储结束符'\0'? ? ? ? ?
scanf读取整个字符串时使用%s,单个字符"%c"
字符数组的传递
#include <stdio.h>
void Print(char b[]){ //b是形参
int i=0;
while(b[i]!='\0'){ //括号里还可以写成b[i]或b[i]!=0
printf("%c",b[i]);
i++;
}
}
int main(){
char a[10]="hello"; //a是实参
Print(a);
}
首字母变大写:
d[0]=d[0]-32;
gets与puts函数
gets
gets函数类似于scanf函数,用于读取标准输入。我们知道scanf 函数在读取字符串时遇到空格就认为读取结束,所以当输入的字符串存在空格时,我们需要使用gets函数进行读取。
gets函数的格式如下:
char *gets(char *str);
字符数组的数组名里存的就是字符数组的起始地址,所以是指针类型
gets 函数从STDIN(标准输入)读取字符并把它们加载到str(字符串)中,直到遇到换行符(\n)或到达EOF。gets遇到\n后,不会存储\n,而是将其直接翻译为空字符'\0'
?
puts
puts函数类似于printf函数,用于输出标准输出。
puts函数的格式如下:
int puts(char *str);
函数 puts把str(字符串)写入STDOU(标准输出)。puts执行成功时返回非负值,执行失败时返回EOF。相对于printf函数,puts 只能用于输出字符串,同时多打印一个换行符。
等价于printf("%s \n" , c);
int main(){
char a[30];
gets(a);
puts(a);
}
?
字符串的相关操作
strlen函数用于统计字符串长度,strcpy函数用于将某个字符串复制到字符数组中,strcmp函数用于比较两个字符串的大小,strcat函数用于将两个字符串连接到一起。各个函数的具体格式如下所示: ?
sizeof()? : 获取的是字符数组的大小,而不是字符数组里字符的长度
strlen():字符数组里字符的长度(长度不算'\0') size_t strlen(char *str)
char a[20]="sunday";
sizeof(a); //结果是20不是6
strlen(a); //6
?
const 是说可以用字符常量来修饰 !
const过的初始化变量不能再被修改
strcpy():将后面的字符串复制到前面的字符数组中? char *strcpy(char *to,const char *from)
char d[10];
strcpy(d,"love"); //love
-------------------------
char d[10]="spring",e[15]="hi";
strcpy(d,e);
puts(d); //hi
?
strcmp():比较两个字符串的大小??int strcmp(const char *str1,const char *str2)
? ? ? ? ? ? ? ? ?相等:返回0? ? ? ?str1<str2: 返回-1? ? ? ? ? str1>str2:返回1
? ? ? 注意:比的不是两个字符串的长度,而是字符在ascii码中对应的数值比如hello<how
int ret=strcmp("hello","how");
printf(ret); //-1
?
strcat():将两个字符串连接到一起??char *strcat(char *str1,const crar *str2)
? ? ? ? ? ? ? ?将后面的字符串拼接到前面的字符串后面,注意只有str2可以用const修饰
? ? ? ? 注意:拼接后的字符长度一定要小于str1的数组长度,否则无法容纳
char d[20]="happy";
char c[10]="day";
strcat(d,c);
puts(d); //happyday
?
|