所以,我知道scanf不是从stdin读取输入的最快方法,并且有一天他和我的老师交谈他说一个简单的getchar()函数直到'\ n',读取一行,将是一个考虑到所有安全问题,扫描速度要快得多。 所以我提出了以下功能:
int read(char *s) {
char tmp = 1;
unsigned short i;
for (i=0; tmp!='\n'&&tmp!=EOF; i++) {
tmp = getchar();
s[i] = tmp;
}
if (tmp==EOF)
return -1;
return i-1;
}
它会读取一个字符串直到'\ n'或找到EOF,如您所见。如果找到EOF,则返回-1,如果它正确读取直到新行返回字符串的长度。使用这个函数我删除了scanf(“%s”,s)以及我用来知道字符串读取长度的strlen,因为现在只使用read函数我已经有了这个信息。问题在于,在向在线裁判提交我的新解决方案后,我的代码的运行时间从0.16秒变为0.18秒。 它不应该更快吗?或者我搞砸了我的阅读功能?
顺便说一句,我应用此解决方案的问题是: http://www.urionlinejudge.com.br/repository/UOJ_1251_en.html