1 条题解

  • 0
    @ 2025-8-24 22:33:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 囧仙
    你做东方鬼畜音MAD,好吗?

    搬运于2025-08-24 22:33:49,当前版本为作者最后更新于2021-09-23 21:50:28,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解

    容易发现,本题就是去寻找输入的字符串里是否含有 \r\verb!\r!\n\verb!\n!。因为本题保证了文本文件仅在一种系统中产生,因此若仅有前者,则为 Mac\text{Mac} 系统;仅有后者,则为 Linux\text{Linux} 系统;如果都有,则为 Windows\text{Windows} 系统。

    • 那么只需要使用 getline\verb!getline! 函数读入整行字符串,然后使用 find\verb!find! 函数查询里面是否含有即可。要注意的是,如果 find\verb!find! 函数没能查找到某个需要匹配的字符串,返回值是 ULLONG_MAX\verb!ULLONG_MAX!

    • 或者可以选择不断读入字符串,直到读到文件末尾(EOF\verb!EOF!),然后对每次读入的字符串使用 find\verb!find! 函数。如果使用 cin\verb!cin!,那么读入到文件末尾则会返回 00;如果使用 scanf\verb!scanf!,那么读入到文件末尾则会返回 1-1(即 EOF\verb!EOF! 字面量)。

    • 或者可以使用 fread\verb!fread!,把输入数据里所有的字符全部读进来(要注意的是,前两种做法都是使用的 C++\text{C++} 里面特有的字符串(string\verb!string!),但是 fread\verb!fread! 属于 C\text{C} 风格读入,读入的东西是 C\text{C} 风格字符串(char []\verb!char []!))。fread\verb!fread! 会返回读入的字符的总个数。因此可以直接循环,进行匹配。

    • 或者可以直接手写 getline\verb!getline!。具体就是不断地使用 getchar\verb!getchar!,一直读到 EOF\verb!EOF!

    参考代码

    #include<iostream>
    #include<string>
    std::string s;
    int main(){
        std::getline(std::cin,s); bool f1=0,f2=0;
        if(s.find("\\r")<s.length()) f1=true;
        if(s.find("\\n")<s.length()) f2=true;
        if(f1&&f2) std::cout<<"windows"<<std::endl; else 
        if(f2    ) std::cout<<"linux"<<std::endl; else 
        if(f1    ) std::cout<<"mac"  <<std::endl;
        return 0;
    }
    
    • 1

    信息

    ID
    7181
    时间
    1000ms
    内存
    125MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者