C++ 快读

    科技2024-04-01  89

    最近快读在比较多滚啦喂 ,我也来蹭一波热度 先看代码:

    inline int read() { int s = 0, w = 1;//s表示那个数的绝对值,w是符号 char ch = getchar();//因为getchar比scanf这些都快,所以用getchar while (ch < '0' || ch > '9')//如果不是数字 { if (ch == '-')//如果是负号 { w = -1;//设置符号为负 } ch = getchar();//下一个 }//现在已经没有非数字字符了,下面的ch就都是数字了 while (ch >= '0' && ch <= '9') { s = (s << 1) + (s << 3) + ch - 48;//把每一位往上加并使用位运算提速 ch = getchar();//下一个 } return s * w;//全部读取完毕,返回这个数 }

    呃,这个模板可以原封不动的套到long long 那么char和char*还有string也很明显了 所以可以写出来一个大集合:

    class Scanner { private: bool blank(char c); public: int readInt(); long long readLL(); char readChar(); void readCStr(char *c); string readString(); } int Scanner::readInt() { int s = 0, w = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') { w = -1; } ch = getchar(); } while (ch >= '0' && ch <= '9') { s = (s << 1) + (s << 3) + ch - '0'; ch = getchar(); } return s * w; } long long readLL() { long long s = 0; int w = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') { w = -1; } ch = getchar(); } while (ch >= '0' && ch <= '9') { s = (s << 1) + (s << 3) + ch - '0'; ch = getchar(); } return s * w; } char Scanner::readChar() { return getchar(); } void Scanner::readCStr(char *c) { char ch = getchar(); while (blank(ch)) ch = getchar(); int p = 0; for (c[p++] = ch; !blank(ch = getchar()); c[p++] = ch); c[p] = '\0';//结尾 } string Scanner::readString() { char strBuf[10000]; readCStr(strBuf); string s = strBuf; return s; } bool Scanner::blank(char c) { return c == ' ' || c == '\r' || c == '\n' || c == '\t'; }//愉快的结束啦

    你们可以试着重载一下Scanner

    Processed: 0.017, SQL: 8