测试代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+50;
char a[N];
inline void solve1()
{
gets(a);
}
inline void solve2()
{
scanf("%s",&a);
}
inline void solve3()
{
char ch;
while(ch!='
')
ch=getchar();
}
inline void solve4()
{
int i=0;
while(~scanf(" %c",&a[i]))
i++;
}
int main()
{
freopen("judge.txt","r",stdin);
clock_t s,t;
s=clock();
//solve1();
//solve2();
//solve3();
solve4();
t=clock();
cout<<t-s<<endl;
return 0;
}
(大部分测试内容于评测鸭上进行)
因为cin过于鸡肋,所以并未进行测试
以下为测试内容:(单位:ms)
-
数据大小:10000
(gets字符串):0.040394
(scanf字符串):0.051836
(getchar单字符):0.057788
(scanf单字符):0.533744
-
数据大小:100000
(gets字符串):0.149481
(scanf字符串):0.229154
(getchar单字符):0.315258
(scanf单字符):5.139085
以下数据因常数过大,精度降低至1
-
数据大小:1000000
(gets字符串):5
(scanf字符串):56
(getchar单字符):48
(scanf单字符):324
-
数据大小:100000000
(gets字符串):661
(scanf字符串):5215
(getchar单字符):4426
(scanf单字符):31578
总结:
1.数据规模较小时,循环getchar输入快于scanf直接输入字符串,数据规模较大时,则反之
2.数据规模较小时,各种方式的时间相差不大
3.gets任何数据规模下都明显快于其他方式,且代码长度最短
(本测试仅供参考)