一. 字符串的存储
-
存储字符串必须要有结束标志’\0’
-
存储字符串的数组长度至少是字符串的有效长度+1
仔细阅读下方代码理解:
#include<stdio.h>
int main()
{
char str1[6] = {
'c', 'h', 'i', 'n', 'a' };
printf("%c\n", str1[5]); // 输出空字符
printf("%d\n", str1[5] == '\0'); // 判断是否含有空字符
char str2[5] = {
'c', 'h', 'i', 'n', 'a' };
printf("%c\n", str2[5]); // 错误输出
printf("%d\n", str2[5] == '\0'); // 判断是否含有空字符
char str3[6] = {
'c', 'h', 'i', 'n', 'a', '\0' };
printf("%c\n", str3[5]); // 输出空字符
printf("%d\n", str3[5] == '\0'); // 判断是否含有空字符
char str4[6] = {
"china" };
printf("%c\n", str4[5]); // 输出空字符
printf("%d\n", str4[5] == '\0'); // 判断是否含有空字符
char str5[5] = {
"china" };
printf("%c\n", str5[5]); // 错误输出
printf("%d\n", str5[5] == '\0'); // 判断是否含有空字符
char str6[6] = "china";
printf("%c\n", str6[5]); // 输出空字符
printf("%d\n", str6[5] == '\0'); // 判断是否含有空字符
return 0;
}
输出结果:
根据输出结果:
- 1 3 4 6 是等价且正确的
- 2 5 是错误的
二. 字符串的输入与输出
1. 几个输入输出字符串的比较
函数 | 格式 | 区别 |
---|---|---|
scanf() | scanf(“%s”,字符数组名) | 不能输入带有空格的字符串,使用多个格式控制符%s可以输入多个字符串,遇空格结束输入,需要人为加上字符串结束标志’\0’ |
gets() | get(字符数组名) | 只能输入一个字符串,遇到回车符结束输入,且自动将回车符’\n’转换为’\0’ |
printf() | printf(“%s”,字符数组名) | 一个printf()函数可以输出多个字符串,输出后不会自动换行 |
puts() | puts(字符数组名) | 一个puts()函数只能输出一个字符串,输出后会自动换行 |
2. 逐个字符的输入输出
- 利用标准输入输出函数scanf()和printf(),配合%c格式描述符
- 必须输入固定个数字符
#include<stdio.h>
int main()
{
int i;
char str[11];
printf("请输入十个字符:");
for (i = 0; i < 10; i++)
scanf("%c", &str[i]);
str[i] = '\0';
i = 0;
while (str[i] != '\0')
{
printf("%c", str[i]);
i++;
}
return 0;
}
- 使用getchar()和putchar()函数输入输出字符串
- 输入字符个数在规定内即可,当输入回车符时结束
#include<stdio.h>
int main()
{
int i=0;
char str[80];
printf("请输入一串字符:");
while ((str[i] = getchar()) != '\n')
i++;
str[i] = '\0';
for (i = 0; str[i] != '\0'; i++)
printf("%c", str[i]);
return 0;
}
3.字符串的整体输入
- 利用标准输入函数scanf(),配合%s格式描述符
- 调用格式:scanf(“%s”,字符数组名);
- 在使用%s格式控制符输入字符串时,scanf()函数会自动在字符串后面加上’\0’
#include<stdio.h>
int main()
{
char str[10];
printf("请输入一串字符:");
scanf("%s", str);//不用& str就是地址
printf("%s\n", str);
return 0;
}
需要输入中间含有空格的字符串时,要用具有多个输入参数的scanf()函数配合输入
#include<stdio.h>
int main()
{
char str1[5],str2[5], str3[5];
scanf("%s%s%s", str1, str2, str3);
printf("%s %s %s\n", str1, str2, str3);
return 0;
}
结果:
how are you
how are you
- 使用函数gets()输入完整的字符串
- 调用格式:gets(字符数组名);
- 该函数可将键盘输入的一行字符以字符串的形式存放到一个字符数组中
- 输入一行字符时以Enter键作为结束符,且自动将回车符’\n’转换为’\0’,作为字符串的结束标志
#include<stdio.h>
int main()
{
char str[50];
gets(str);
printf("%s\n", str);
return 0;
}
结果:
how are you
how are you
4. 字符串的输出
- 利用标准输出函数printf(),配合%s格式描述符
- 调用格式:printf(“%s”,字符数组名);
#include<stdio.h>
int main()
{
char str1[]="How are you?";
char str2[] = "I am fine.Thank you.";
printf("%s\n%s\n", str1,str2);
return 0;
}
结果:
How are you?
I am fine.Thank you.
- 使用函数puts()输出完整的字符串
- 调用格式:puts(字符数组名);
- 该函数可将一个字符串(以’\0’结束的字符序列)输出到屏幕
- 输出后会自动换行
#include<stdio.h>
int main()
{
char str[]="How are you?";
puts(str);
printf("I am fine.Thank you.");
return 0;
}
结果:
扫描二维码关注公众号,回复:
17066875 查看本文章
How are you?
I am fine.Thank you.//可看出换了行