一.数组的存储
- 存储字符串必须要有结束标志'\0'
- 存储字符串的数组长度至少时字符串的有效长度 + 1
输入123
数组长度 = 字符串长度+1. 字符串结束标志\0在输入后自动加上
二.字符串的输入与输出
1.4个输入输出字符串函数的比较
函数 | 格式 | 区别 |
scanf() | scanf("%s", 字符数组名) | 使用多个格式控制符%s可以输入多个字符串, 遇到空格结束这一次输入. enter键后\r自动转换为 '\0' |
gets() | gets(字符数组名) | 只能输入一个字符串, enter键后 \r 转换为\0 |
printf() | printf("%s", 字符数组名) | 可以输出多个字符串, 不会自动换行,要加\n |
puts() | puts(字符数组名) | 只能输出一个字符串,自动换行 |
两个s的函数不安全, 所以在新的c标准已经不支持它们了.
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;
}
结果:
How are you?
I am fine.Thank you.//可看出换了行
5. 多维数组可以以'行'为单位输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char whichDay[7][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int day = 0;
scanf("%d", &day);
//合法性判断
if (day < 1 || day > 7)
{
printf("输入错误, 请输入数字1~7\n");
return 1;
}
printf("%s\n", whichDay[day - 1]);
return 0;
}
输入输出单个字符时, 可以使用getchar() 和putchar()
int a;
a = getchar();// 无参数, 输入一个字符 == scanf("%c", &a);
//返回读取字符的asc码值;读取失败,返回EOF(-1); 所以变量a要为int
//也会空白字符, 而scanf遇到空格停止读取
putchar(a); //有参数, ==printf,输出一个字符
//返回输出的字符, 否则返回常量EOF.