1.1 输入一行(带空格)字符串

输入一行字符串,遇到空格不停止,遇到换行符才停止输入.

输入格式

共一行,一个字符串.

输入:
Hello, How are you?

1.1.1 scanf正则表达式

scanf支持简单的正则表达式,可以利用正则表达式让scanf函数遇到换行符时停止读入.

板子:
  1. #include <cstdio>
  2. int main()
  3. {
  4. char str[100];
  5. scanf("%[^\n]", &str);
  6. return 0;
  7. }

1.2 输入多行带空格字符串

输入n行字符串,遇到空格不停止,遇到换行符才停止输入.

输入格式

第一个输入整数n,代表字符串个数.
接下来n行,每行输入一个带空格的字符串.

输入:
6
Hello, How are you?
I’m fine, thank you.
When do you have time?
This weekend.
Do you want to play oudoor?
Yes, let’s go.

1.2.1 scanf正则表达式

技巧:

scanf()函数可以搭配简单正则表达式,scanf("%[^\n]",str)语句的作用为:遇到回车时,把缓冲区里面的内容按字符串格式输入str中,但是回车保留在缓冲区里,因此下一次读入前需要用char c = getchar();语句读取上一个回车。

板子:
  1. #include <cstdio>
  2. const int MAXN = 10010;
  3. char strs[15][MAXN];
  4. int main()
  5. {
  6. char c;
  7. int n;
  8. scanf("%d", &n);
  9. c = getchar();
  10. for (auto i = 0; i < n; ++ i) {
  11. scanf("%[^%\n]",strs[i]);
  12. c = getchar();
  13. }
  14. printf("\n");
  15. for (auto i = 0; i < n; ++ i) printf("%s\n", strs[i]);
  16. return 0;
  17. }

如果想要避免下一个字符串读入缓冲区的回车,可以使用scanf("%*c)来跳过当前缓冲区的第一个字符。
使用scanf("%*c)来跳过缓冲区的换行符:

  1. #include <cstdio>
  2. const int MAXN = 10010;
  3. char strs[15][MAXN];
  4. int main()
  5. {
  6. char c;
  7. int n;
  8. scanf("%d%*c", &n);
  9. for (auto i = 0; i < n; ++ i) scanf("%[^%\n]%*c",strs[i]);
  10. printf("\n");
  11. for (auto i = 0; i < n; ++ i) printf("%s\n", strs[i]);
  12. return 0;
  13. }

1.2 输入一行定长数字作为数组的值

输入一行定长数字字符串作为数组的输入值,数字字符之间用空格分隔.

输入格式

第一行有一个整数n,表示数组长度.

第二行有n个整数,表示要用数组存储的值,每个整数之间用空格隔开.

输入:
6
2 3 9 14 78 90

1.2.1 直接输入

  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. const int MAXN = 100010;
  5. int main()
  6. {
  7. int n;
  8. cin>>n;
  9. int num[MAXN];
  10. for (int i = 0; i < n; ++ i){
  11. cin>>num[i];
  12. }
  13. return 0;
  14. }

1.3 输入一行不定长数字作为数组的值

输入一行不定长数字字符串作为数组的输入值,数字字符之间用空格分隔.

输入格式

共一行,有n个整数,表示要用数组存储的值,每个整数之间用空格隔开.

输入:
2 3 9 14 78 90

1.3.1 getchar()判断是否到行末

先输入第一个数字,然后在while循环中,交替:
(1)用字符变量c读入空格并判断是否是换行符(达到行末);
(2)读入数字,存储在数组中.

  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. const int MAXN = 100010;
  5. int main()
  6. {
  7. int num[MAXN];
  8. int i = 0, temp;
  9. char c;
  10. cin>>num[i++];
  11. while ((c = getchar()) != '\n') {
  12. cin >> num[i++];
  13. }
  14. return 0;
  15. }