我正在尝试以下列方式读取存储特征向量的特征向量文件:
(标签)(bin):(值)(bin):(值)等。
像:
-1 5:0.015748 6:0.0472441 7:0.0393701 8:0.00787402 12:0.0314961 13:0.0944882 14:0.110236 15:0.0472441 20:0.023622 21:0.102362 22:0.110236 28:0.015748 29:0.228346 30:0.125984
正如你所看到的那样,它的保存时没有值为0的箱子。
我尝试使用以下代码阅读它们:
int bin;
int label;
float value;
string small_char; -> change to char small_char to fix the problem
if(readFile.is_open())
while(!readFile.eof()) {
getline(readFile, line);
istringstream stm(line);
stm >> label;
cout << label << endl;
while(stm) {
stm >> bin;
stm >> small_char;
stm >> value;
cout << bin << small_char << value << endl;
}
cout << "Press ENTER to continue...";
cin.ignore( numeric_limits<streamsize>::max(), '\n' );
}
}
但由于未知原因,标签被正确读取,第一个bin也有值,但是根本没有读取下面的bin。
上面示例行的输出是:
-1
5:0.015748
5:0.015748
Press ENTER to continue
对于所有追随的行都会发生同样的事情。
我正在使用visual studio 10,无论如何这都很重要。
答案 0 :(得分:0)
自己测试后,您似乎没有使用正确的类型(以及正确的循环条件)。
我的测试程序:
#include <sstream>
#include <iostream>
int main()
{
std::istringstream is("-1 5:0.015748 6:0.0472441 7:0.0393701 8:0.00787402 12:0.0314961 13:0.0944882 14:0.110236 15:0.0472441 20:0.023622 21:0.102362 22:0.110236 28:0.015748 29:0.228346 30:0.125984");
int label;
int bin;
char small;
double value;
is >> label;
std::cout << label << '\n';
while (is >> bin >> small >> value)
{
std::cout << bin << small << value << '\n';
}
}
该计划的输出是:
-1 5:0.015748 6:0.0472441 7:0.0393701 8:0.00787402 12:0.0314961 13:0.0944882 14:0.110236 15:0.0472441 20:0.023622 21:0.102362 22:0.110236 28:0.015748 29:0.228346 30:0.125984
因此,请确保变量类型正确,并将循环更改为不会获得双重最后一行。