如何仅通过' \ n'来分隔istream中的字符串?

时间:2013-02-07 05:41:24

标签: c++ string stream iostream separator

给定一个包含字符串“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'等分隔。

我该怎么办?

3 个答案:

答案 0 :(得分:5)

请改用std::getline(std::cin,str)。第三个参数执行您想要的操作,默认为'\n'。或者,您可以通过设置传递std::cin >> std::noskipws >> str来禁用跳过空格,或者通过执行std::cin.unsetf(std::ios::skipws)

来完全关闭该标记

答案 1 :(得分:2)

要阅读ifstream中的一行,您可以使用std::getlinestd::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;
}

答案 2 :(得分:1)

string str;
while(fscanf(fin,"%s\n",&str));