所以我不熟悉C ++中的向量,我的目标是从文件中读取一行,将其存储在字符串向量中,将其转换为整数并将其推送到int向量。我遇到的问题是,当我将char转换为int时,我松散了前导0。我想保留前导0(文件是矩阵文件)。我将最终文件存储在2D int矢量中。当我运行temp.size()时,我得到结果为1,我知道这与我如何将字符串转换为整数有关,所以我相信在向量中只存储了1个数字。
std::vector< std::vector<int> > data;
std::vector< std::vector<int> > res;
std::ifstream f("input.txt", ios::binary);
string line;
int count;
while(std::getline(f,line))
{
std::vector<string> line_data;
std::vector<int> temp;
std::istringstream iss(line);
std::string value;
while(iss >> value)
{
line_data.push_back(value);
std::transform(line_data.begin(), line_data.end(),
std::back_inserter(temp),
[](std::string &s) { return std::stoi(s); } );
count = value.length();
count = count - temp.size(); // temp.size() returns 1, why is that and how can I fix it?
cout << count <<endl;
temp.insert(temp.begin(),count,0);
data.push_back(temp);
}
我的输入是未知长度的布尔方阵。比如说:
00101
10101
10100
00101
01111
编辑:
从int矢量数据获取输出时:
101
10101
10100
101
1111
失去领先0
因此我尝试计算值和temp的长度差异并手动插入0。
答案 0 :(得分:0)
为什么要将二进制模式用于文本数据?简化了一点,所以它来:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
int main()
{
std::ifstream f("input.txt");
std::vector< std::vector<int> > data;
std::string line;
// fill data
while (std::getline(f, line))
{
std::vector<int> temp;
std::transform(line.begin(), line.end(),
std::back_inserter(temp),
[](char c) { return std::stoi(std::string(&c, 1)); });
data.push_back(temp);
}
// print data
for (std::vector<int> x : data)
{
for (int y : x)
std::cout << y;
std::cout << std::endl;
}
return 0;
}
打印:
00101
10101
10100
00101
01111