我正在尝试从文件中读取并将数据插入到矢量中。该文件看起来像:
16
0100
0111
0111
0001
0100
1011
1010
0010
0110
1001
1100
1001
1100
0101
0101
0001
我希望我的矢量看起来像:
16 0 1 0 0 0 1 1 1 0 1 1 1...
我的代码如下所示:
void readFile(string name){
ifstream fin;
vector<int> graphData;
int y;
fin.open(name);
if (!fin.is_open()){
cout << "Error: Could not open data.";
}
else{
while(!fin.eof()){
fin >> y;
graphData.push_back(y);
}
}
fin.close();
for(int i = 0; i < graphData.size(); ++i){
cout << graphData[i] << " ";
}
}
我很确定问题在于我定义y然后尝试将其推入。但是当我运行代码时,没有输出任何内容,因为向量是空的。
答案 0 :(得分:1)
尝试将数字作为字符串读取:
unsigned int quantity = 0;
fin >> quantity;
fin.ignore(100000, '\n');
std::string number_text;
vector<int> binary;
while (getline(fin, number_text))
{
for (int i = 0; i < number_text.length())
{
int bit = number_text[i] - '0';
binary.push_back(bit);
}
}
答案 1 :(得分:1)
您可以 - 在跳过行数后 - 读取每个字符并将其与'0'
或'1'
进行比较。请参阅以下代码:
int main() {
vector<bool> bits;
ifstream f(DATAFILE);
if (f.is_open()) {
int dummy;
f >> dummy;
char c;
while (f >> c) {
if (c == '1') {
bits.push_back(true);
}
else if (c=='0') {
bits.push_back(false);
}
}
f.close();
for(int i = 0; i < bits.size(); ++i){
cout << bits[i] << " ";
}
}
return 0;
}
答案 2 :(得分:0)
您应该使用getline函数逐行获取输入:
在fin.open(name);
这样做:
getline(fin,line);
然后将line
保存到您的