我有以下代码将选项卡分隔文件的内容加载到字符串的2D矢量中。问题是如果数据中有任何空间,这就是代码失败。如何修改代码以将其考虑在内。
const std::size_t columns = 4;
std::string word;
std::size_t count = 0;
std::ifstream in("some_file");
std::vector<std::vector<std::string>> data;
std::vector<std::string> row;
while(in >> word) {
row.push_back(std::move(word));
if(++count % columns == 0) {
data.push_back(std::move(row));
row.clear();
}
}
答案 0 :(得分:2)
使用std :: getline获取整行,然后根据制表符分隔符将该行拆分为单独的字符串。像这样:
#include <sstream>
std::string line;
std::vector<std::vector<std::string>> data;
while(std::getline(in, line)) {
std::string phrase;
std::vector<std::string> row;
std::stringstream ss(line);
while(std::getline(ss, phrase, '\t')) {
row.push_back(std::move(phrase));
}
data.push_back(std::move(row));
}