该文件包含以下数据:
#10000000 AAA 22.145 21.676 21.588
10 TTT 22.145 21.676 21.588
1 ACC 22.145 21.676 21.588
我尝试使用以下代码跳过以“#”开头的行:
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
int main() {
while( getline("myfile.txt", qlline)) {
stringstream sq(qlline);
int tableEntry;
sq >> tableEntry;
if (tableEntry.find("#") != tableEntry.npos) {
continue;
}
int data = tableEntry;
}
}
但由于某种原因,它会出现这个错误:
Mycode.cc:13:错误:请求 成员'find'在'tableEntry'中,哪个 是非类型'int'
答案 0 :(得分:9)
这更像你想要的吗?
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
fstream fin("myfile.txt");
string line;
while(getline(fin, line))
{
//the following line trims white space from the beginning of the string
line.erase(line.begin(), find_if(line.begin(), line.end(), not1(ptr_fun<int, int>(isspace))));
if(line[0] == '#') continue;
int data;
stringstream(line) >> data;
cout << "Data: " << data << endl;
}
return 0;
}
答案 1 :(得分:4)
您尝试从该行中提取整数,然后尝试在整数中找到“#”。这没有意义,编译器抱怨整数没有find
方法。
您可能应该在循环开始时直接在读取行上检查“#”。
除此之外,您需要声明qlline
并实际在某处打开文件,而不只是将其名称的字符串传递给getline
。基本上是这样的:
ifstream myfile("myfile.txt");
string qlline;
while (getline(myfile, qlline)) {
if (qlline.find("#") == 0) {
continue;
}
...
}