【问题标题】:How to separate strings in an istream only by '\n'? [duplicate]如何仅通过 '\n' 分隔 istream 中的字符串? [复制]
【发布时间】:2013-02-07 05:41:24
【问题描述】:

给定一个包含字符串“Hello World”的文件(注意“Hello”和“World”之间有一个空格)。

int main()
{
    ofstream fout("test.txt");
    fout.write("Hello World", 12);
    fout.close();

    ifstream fin("test.txt");
    vector<string> coll((istream_iterator<string>(fin)),
                        (istream_iterator<string>()));
    // coll contains two strings 'Hello' and 'World' rather than 
    // one string "Hello World" that is just I want.
}

换句话说,我希望 istream 中的字符串只能用 '\n' 分隔,而不是用 ' '、'\n' 等分隔。

我该怎么办?

【问题讨论】:

    标签: c++ string stream iostream separator


    【解决方案1】:

    请改用std::getline(std::cin,str)。第三个参数做你想做的事,它默认为'\n'。或者,您可以通过设置传递 std::cin &gt;&gt; std::noskipws &gt;&gt; str 来禁用跳过空格,或者通过执行 std::cin.unsetf(std::ios::skipws) 完全关闭标志

    【讨论】:

    • 我修改了原帖。请查看。
    【解决方案2】:

    要从ifstream 读取一行,您可以使用std::getline。 std::getline的默认分隔符是\n

    int main(int argc, const char * argv[])
    {
        ifstream fin("test.txt");
        std::string str;
    
        while (std::getline(fin, str))
        {
            cout << str << endl;
        }
    
        return 0;
    }
    

    【讨论】:

    • 我修改了原帖。请查看。
    【解决方案3】:
    string str;
    while(fscanf(fin,"%s\n",&str));
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2013-03-03
      • 2015-02-21
      相关资源
      最近更新 更多