字符数组
1、类型相同
2、顺序排列
3、元素为char的字符数组可以存储字符串的
初始化字符数组
char str[20] = {'H','e','l','l','o'};
char str[20] = "Hello";
char str[20] = {'H','e','l','l','o','\0'};
打印字符数组
#include <stdio.h>
int main()
{
char str[20] = {'H','e','l','l','o'};
printf(str);
printf("\n");
printf("%s",str);
printf("\n");
return 0;
}
初始化列表长度小于数组长度时正常打印
初始化列表长度等于数组长度时,无\0,无结尾
初始化列表长度大于数组长度时,无\0,无结尾
测量字符串的长度
1、使用循环
#include <stdio.h>
int main()
{
char str[20] = "HelloWorld";
int len = 0;
while(str[len] != '\0')
{
len++;
}
printf("%d",len);
return 0;
}
2、strlen测量字符串长度
需知:
a、strlen可以接受一个字符串作为参数
b、strlen返回值为这个字符串的长度
c、使用strlen,需包含头文件string.
d、strlen(str)测量从第一个元素直到\0的字符串长度
sizeof(str)测量数组本身占用空间的大小
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = "HelloWorld";
int len1;
len1 = strlen(str); //测量str字符串长度
printf("len1 = %d\n",len1);
int len2;
len2 = strlen("HelloWorld"); //测量“HelloWorld”字符串常量长度
printf("len2 = %d\n",len2);
printf("sizeof str %d\n",sizeof(str));
printf("sizeof helloworld %d\n",sizeof("HelloWorld")); //测量所占空间大小
return 0;
}
//结果
len1 = 10
len2 = 10 //HelloWorld字符串长度
sizeof str 20 //字符数组有20个元素
sizeof helloworld 11 //字符串长度加上\0,占用11个字节
修改字符数组
字符串常量不能修改,字符数组可以修改
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = "abcde";
printf(str);
printf("\n");
for(int i = 0;i < strlen(str); i++)
{
str[i] = str[i] - 32; //将小写字母转换为大写字母
}
printf(str);
return 0;
}
输入字符串
char str[20];
scanf("%s",str);
#include <stdio.h>
#include <string.h>
int main()
{
char str[20];
scanf("%s",str); //scanf输入时没有\0,字符串可以正常结尾
printf(str);
printf("\n");
for(int i = 0;i < strlen(str); i++)
{
str[i] = str[i] - 32; //将小写字母转换为大写字母
}
printf(str);
return 0;
}
putchar、getchar
putchar('A'); //输出单个字符
char c;
c = getchar(); //输入单个字符
#include <stdio.h>
int main()
{
char c;
c = getchar();
c = c - 32;
putchar(c);
return 0;
}
#include <stdio.h>
int main()
{
char str[] = "HelloWorld";
int i = 0;
while(str[i] != '\0')
{
putchar(str[i++]);
}
return 0;
}
输入输出缓存
输出缓存
eg:windows、linux
#include <stdio.h>
#include <windows.h> //使用sleep休眠500毫秒
int main()
{
for(int i = 0; i < 10; i++)
{
printf("HelloWorld %d",i);
sleep(500);
}
return 0;
}
//每打印一个休眠500毫秒
#include <stdio.h>
#include <unistd.h> //使用usleep休眠500毫秒(500微秒*1000)
int main()
{
for(int i = 0; i < 10; i++)
{
printf("HelloWorld %d",i);
usleep(1000 * 500);
}
return 0;
}
//先休眠5000毫秒,最后一次性打印完
行缓存:一行结束之后,必须刷新缓存(输入输出缓存都是行缓存)\n结束一行
完全缓存:等到缓存区被填满才刷新缓存
输入缓存
#include <stdio.h>
int main()
{
char c1,c2;
c1 = getchar();
putchar(c1);
getchar(); //用于吸收上一个getchar的回车
c2 = getchar();
putchar(c2);
return 0;
}
getchar输出字符串
#include <stdio.h>
int mian()
{
char str[20]; //可以存储19个字符,最后要加上\0
int i = 0;
while(i < 20 - 1)
{
char c;
c = getchar(); //从从缓存区读取字符
str[i++] = c;
if(c == '\n')
{
break;
}
}
str[i] = '\0';
printf(str);
return 0;
}