前言

简介:涉及做题时关于输入输出有关问题。


输入数据

ACM中第一次遇到有多组输入的题目时,可能不了解如何确定是否输入结束,此处给出cin和scanf两个版本。

多组输入

使用cin

while(cin>>x){

}

使用scanf

while(scanf("%d",&x)!=EOF){

}

例题链接POJ 1001,该题下面的Hint(提示)中也提示了C/C++如何确定是否输入结束。(PS:此题不一定需要做,只是方便了解如何多组输入)

字符串输入

  • 接受含有空格的字符串或以特定字符结束
    此处用gets()有坑(ACM中直接使用会报错,故不推荐),可以根据情况使用getline()和cin.getline()。
//getline(istream,string,结束符); 结束符可选默认换行符
string s1;
getline(cin,s1);  //需include<string>,且s需为string类型
getline(cin,s1,'c'); //以 'c' 为结束符

/*
istream & getline(char* buf, int bufSize, char delim);
cin.getline(字符指针(char*), 字符个数N(int),结束符(char)); 结束符可选默认换行符
PS:字符最后个为'\0',所以如果字符个数设置为5,输入 "abcde",输出结果为"abcd"
*/
char s2[10];
cin.getline(s2,10);    //s2不可以为string类型,长度不超过10
cin.getline(s2,10,'c'); //以 'c' 为结束符,长度不超过10

快读快写

为了方便,输入阿鑫也经常用 cin。
但他其实是比较慢的,在一些输入数据很多的情况下,他的慢会体现的很明显。
所以对于多数据输入时,一般都用 scanf。

但是在个别情况下被卡时长且输入数据多的情况下,可以尝试使用快读(比如阿鑫之前做过道题限时5000ms,输入数据较多,scanf最后用时5000+ms,用快读后4600+就ac了)。

先直接上模板

快读

inline void read(int &x){
   int sum = 0, flag = 1; char ch = getchar();
   while(ch < '0' || ch > '9'){ if(ch == '-') flag = -1; ch = getchar(); }
   while(ch >= '0' && ch <= '9') {sum = sum * 10 + ch - '0', ch = getchar();}
   x = sum*flag;
}
/*
ps: 如果想再快一点的话
可将 while(ch >= '0' && ch <= '9') {sum = sum * 10 + ch - '0', ch = getchar();}    
改为 while(ch >= '0' && ch <= '9') {sum=(sum<<3)+(sum<<1)+(ch^48); ch = getchar();}
*/

快写

void write(int x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}

使用样例

#include <bits/stdc++.h>
using namespace std;
inline void read(int &x){
   int sum = 0, flag = 1; char ch = getchar();
   while(ch < '0' || ch > '9'){ if(ch == '-') flag = -1; ch = getchar(); }
   while(ch >= '0' && ch <= '9') sum = sum * 10 + ch - '0', ch = getchar();
   x = sum*flag;
}
void write(int x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}
int main()
{
    int a;
    read(a);    //cin>>a;
    write(a);    //cout<<a;
    return 0;
}
Copyright © 阿鑫 2022 all right reserved,powered by Gitbook最初发布时间: 2022-02-13

results matching ""

    No results matching ""