我的文件是这样的:
INT1 - 标签 - INT2 - 标签 - INT3 - 标签 - INT4 - 标签 - 换行符
INT1 - 标签 - INT2 - 标签 - INT3 - 标签 - INT4 - 标签 - 换行符
INT1 - 标签 - INT2 - 标签 - INT3 - 标签 - INT4 - 标签 - 换行符 ...
我想将每一行保存到一个数组中。我的意思是所有int1都在一个数组中,并且想要做同样的whit int2 int3 ...
我真的不知道怎么做,请帮帮我
我已经尝试逐行阅读
#include <sstream>
#include <string>
std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
int a, b;
if (!(iss >> a >> b)) { break; }
}
答案 0 :(得分:3)
你有正确的想法使用字符串流。由于可能会再次使用读取分隔文件的代码,因此您可能会发现将其放入类中很有用。以下是我个人划分的FileReader类的摘录:
bool FileReader::getrow(RowMap &row){
std::string line = "";
if(std::getline(filehandle,line)){
std::stringstream line_ss(line);
std::string column = "";
unsigned int index = 0;
while(std::getline(line_ss,column,delimiter)){
if(index < headers.size()){
row[headers[index]] = column;
index++;
}
else{
break;
}
}
return true;
}
return false;
}
其中RowMap是typedef:
typedef std::unordered_map<std::string,std::string>
标题是typedef:
typedef std::vector<std::string> RowHeadersVector;
并且应该有你的专栏名称:
RowHeadersVector headers;
headers.push_back("column_1");
在我的示例中,我使用字符串到字符串的映射,但您可以轻松地将其更改为:
typedef std::unordered_map<std::string,int>
使用这样的地图的好处是自编代码:
row["column_1"]
答案 1 :(得分:0)
奇怪的是,你已经完成了困难的部分并且被困在我认为容易的部分上。
只需用数组和索引替换a
和b
。
int a[100], b[100];
int count = 0;
std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
if (!(iss >> a[count] >> b[count])) { break; }
++count;
}
在此循环结束时,count
将告诉您已添加到阵列的项目数。当然,如果您尝试向阵列添加超过100个项目,此代码将崩溃。我会让你考虑一下。
答案 2 :(得分:0)
这看起来很合理。如果您知道列数,则可以创建合适的数组并添加它们:
std::vector<int> array, barray, carray, darray;
std::istringstream lin;
for (std::string line; std::getline(infile, line); ) {
lin.clear();
lin.str(line);
if (lin >> a >> b >> c >> d) {
aarray.push_back(a);
barray.push_back(b);
carray.push_back(c);
darray.push_back(d);
}
else {
std::cout << "WARNING: failed to decode line '" << line << "'\n";
}
}