C++从文本文件中逐行读取文本的方式比较常见,在有些情况下需要从字符串中逐行读取数据,比如说有一个csv文件数据存储在一个std::string中,我们需要逐行解析这个csv文件的内容,这个时候就需要使用到stringstream

1 从文件中逐行读取文本

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::ifstream infile;
    infile.open("example.txt", std::ios::in);

    if (!infile.is_open())
        return 0;

    std::string line;
    while (getline(infile,line))
    {
        std::cout << line << std::endl;
    }

    infile.close();

    return 0;
}

2 从字符串流std::stringstream中逐行读取文本

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

int main()
{
    // 先一次性将文本内容读取到std::string
    std::ifstream infile;
    infile.open("example.txt", std::ios::in);
    std::istreambuf_iterator<char> beg(infile), end;
    std::string strdata(beg, end);
    infile.close();

    // 从std::stringstream中逐行读取
    std::stringstream ss(strdata);
    std::string line;
    while (getline(ss, line))
    {
        std::cout << line << std::endl;
    }

    return 0;
}