这里写自定义目录标题
字符串与字符数组
定义字符数组
char arr[5]={'h','e','l','l','o'};
打印字符数组
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++) // 求字符长度可以直接写成sizeof(arr) 因为char类型一个字节大小 不过建议写成sizeof(arr)/sizeof(arr[0])
{
printf("%c",arr[i]);
}
字符串 字符结束标志位为\0 数字0等同于\0但是不等同于’0’ 因为\0的assima值等于0 0的ASCII值是48
char * arr="hello";
char arr[6]="hello";
char arr[]={'h','e','l','l','o','\0'};=char arr[6]={'h','e','l','l','o'};
注:字符数组如果有’\0’ 标志位可以理解成是字符串 字符串是字符数组的一个头特例
打印字符串
printf("%s",arr); //%s遇到\0停止
没有\0的字符数组不能用字符串打印
字符数组应用比较少 大多数情况用字符串 用字符串一定要考虑\0的位置
通过键盘获取一个字符串
int main()
{
//定义字符数组存储字符串
char ch[10]; //最多只能存储9个字符 要预留一个\0
scanf("%s",ch); //这里没有加取地址符号& 是因为%s本来就是个地址
printf("%s",ch);
return 0;
}
拼接两个字符串
int main()
{
char ch1[]="hello";
char ch2[]="world";
char ch3[20];
int i =0;
int j=0;
while(ch[i]!='\0')
{
ch3[i]=ch1[i];
i++;
}
while(ch[j]!='\0')
{
ch3[i+j]=ch1[j];
j++;
}
ch3[i+j]='\0';
printf("%s",ch3);
return 0;
}
字符数组与字符串的区别
1、C语言中没有字符串这种数据类型,可以通过char的数组来代替;
2、字符串是一个char的数组,但是char的数组未必是字符串;
3、数字0(和字符’\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符,只是普通字符数组,所以字符数组是一种特殊char的数组。
//定义字符数组
char arr[] = { 110,111,112,0,123,98,99}; //对应的是assi值
printf("%s\n", arr); //打印结果nop 到0停止
字符串输入输出
int main1101()
{
char ch[100];
//通过键盘获取一个字符串
//gets接收字符串可以带空格
gets(ch);
//通过正则表达式 获取带空格字符串
//scanf("%[^\n]", ch); //通过正则表达式接受空格
printf("%s\n", ch);
return 0;
}
//注意:由于scanf()与gets()无法知道字符串s大小,必须遇到换行符或读到文件结尾为止才接收输入,因此容易导致字符数组越界(缓冲区溢出)的情况。
int main1102(void)
{
char ch[10];
//"hello\n\0"
//fgets可以接收空格
//fgets获取字符串少于元素个数会有\n 大于等于 没有\n
fgets(ch, sizeof(ch), stdin);
printf("%s", ch);
return 0;
}
//注意:fgets()在读取一个用户通过键盘数日的字符串的时候,同时把用户输入的回车也作为字符串的一部分。通过scang和gets输入一个字符串的时候,不包含结尾的‘\n’,但是通过fgets结尾多了‘\n’。fgets()函数是安全的,不存在缓冲区溢出的问题。
int main1103(void)
{
char ch[] = "hello world";
//puts自带换行
puts(ch);
//puts("hello\0 world");
//puts("");换行
return 0;
}
int main1004(void)
{
char ch[] = "hello world";
fputs(ch, stdout);
//printf("%s", ch);
return 0;
}
//注意:fputs()是puts()的文本操作版本,但fputs()不会自动输出一个‘\n’
计算字符串有效个数
int main()
{
char ch[100]="hello world";
printf("数组大小:%d",sizeof(ch)); //运行结果是100
printf("字符串长度:%d",strlen(ch)); //运行结果是11
return 0;
}
int main()
{
char ch[]="hello world";
int len=0;
while(ch[len]!='\0')
{
len++;
}
printf("字符串长度:%d",len);//运行结果是11
}