字符数组:
char str[5] = { 'h','e','l','l','o' };
字符串:
char str[6] = { 'h','e','l','l','o','\0' };
char str[]="hello";
printf("%s",str); //使用printf打印字符串的时候,必须碰到\0结束
给\0的位置留出来,否则无法正常打印
char str[11] = {0};
for (size_t i = 0; i < 10; i++)
{
scanf_s("%c", &str[i]);
}
printf("str=%s\n",str);
如果str赋值内存10,输入helloworld则会输出乱码
练习:统计用户输入每个字母的出现次数
char str[11] = {0};
for (size_t i = 0; i < 10; i++)
{
scanf_s("%c", &str[i]);
}
int count[26] = { 0 }; //代表26个英文字母出现的次数。
for (size_t i = 0; i < 11; i++)
{
int index=str[i]-'a'; //用户输入的字符再count数组中的下标值。
count[index]++;
}
for (size_t i = 0; i < 26; i++)
{
if (count[i] != 0)
{
printf("%c字符在字符串中出现%d次\n",i+'a',count[i]);
}
}
字符串获取scanf:
1.用于存储字符串的空间必须足够大,防止溢出。char str[5];
2.获取字符串,%s,遇到空格 和 \n 终止
借助“正则表达式”获取带有空格的字符串,scanf( " % [ ^ \n ] " , str);
%表示格式匹配符,中括号表示取值范围,上限符表示除....之外
gets函数:
获取一个字符串,返回字符串的首地址,可以获取带有 空格 的字符串
接收一个字符指针作为参数,该指针指向已经分配好空间的一个字符数组。当调用gets()函数时,将读到的字符串赋值给该字符数组。
读到的字符串会以指针形式返回。这点与scanf函数类似
char *gets(char *s)
参数:用来存储字符串的空间。
返回值:返回实际获取到的字符串首地址
gets(str)与scanf("%s",str)区别在于gets允许字符串中含有空格,scanf则不允许
【不安全字符串获取】
//头文件报错原因
fgets函数:
空间足够会读取\n,空间不足则舍弃【安全】
char *fgets(char*s,int size,FILE *stream);
参数1:用来存储字符串的空间地址
参数2:描述空间的大小
参数3:读取字符串的位置
返回值:返回实际获取到的字符串首地址
char str[100];
printf("获取的字符串为:%s\n", fgets(str,sizeof(str),stdin));
puts函数:
输出字符串后会自动添加 \n 换行符
pritnf("%s","hello"); /printf("hello\n");/puts("hello\n");
int puts(const char *s);
参数1:写出到屏幕的字符串
返回值:成功:非负数,0 失败:-1
fputs:
输出字符串后不添加\n换行符
int fputs(const char*str, FLIE * stream);
参数1:写出到屏幕的字符串。 屏幕 ---》标准输出:stdout
参数:写出位置stdout
返回值:成功:0 失败:-1
strlen:
获取字符串的有效长度,不包括 \0
char str[]="hello world";
printf("sizeof(str)=%u\n",sizeof(str));
printf("strlen(str)=%u\n",strlen(str));
输出:
str=12
str=11
参数1:待求长度的字符串
返回:有效字符个数
获取途中碰到 \0 结束
char str[]="hello\0world";
printf("sizeof(str)=%u\n",sizeof(str));
printf("strlen(str)=%u\n",strlen(str));
输出;
str=12
str=5
char str[]="hello\0world";
int i = 0;
while (str[i] != '\0')
{
i++;
}
printf("%d\n",i);
//等价 printf("%d\n",strlen(str));
字符串追加:
char str1[ ]="hellow";
char str2[ ]="world";
char str3[100]={0};
char str1[] = "hellow";
char str2[] = "world";
char str3[100] = { 0 };
int i = 0;
while (str1[i]!='\0')
{
str3[i] = str1[i]; //循环将str1中的每一个元素交给str3
i++;
}
int j = 0;
while (str2[j] != '\0')
{
str3[j + 5] = str2[j];
j++;
}
printf("%s\n",str3);