使用getchar()的自己的函数比scanf慢

时间:2014-02-22 19:45:24

标签: c optimization input scanf getchar

所以,我知道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

0 个答案:

没有答案