C++ c++;如何读取结构化数据并跳过表头的第一行?

C++ c++;如何读取结构化数据并跳过表头的第一行?,c++,C++,数据类似于以下表格 Name Language Mathematics // the head line Xiaoming 89 56 Xiaofang 48 48 我想操纵整个结构并跳过第一行,我应该怎么做 #included <iosteam> #included <string> using namespace std; struct Student{ string name; double language; double mathemati

数据类似于以下表格

Name Language Mathematics  // the head line
Xiaoming 89 56
Xiaofang 48 48
我想操纵整个结构并跳过第一行,我应该怎么做

#included <iosteam>
#included <string>
using namespace std;
struct Student{
   string name;
   double language;
   double mathematics;
}student;
void readdata(string infile,string outfile){
  ifstream in(infile);
  string headline;
  getline(in,headline);
  while(in.read(&student, sizeof(student))!=NULL){   //?
     ....
  }
}
int main(int argc, char **argv){
  string infile, outfile;
  for(int i=0;i<argc;i++){
     if(strcmp(argv[i],"-i"))
       infile=argv[i+1];
     if(strcmp(argv[i],"-o"))
       outfile=argv[i+1];
  }
  readdata(infile,outfile);
}
#包括在内
#包括
使用名称空间std;
结构学生{
字符串名;
双语;
双重数学;
}学生;
无效读取数据(字符串填充、字符串输出文件){
ifstream in(infle);
字符串标题;
getline(in,headline);
while(in.read(&student,sizeof(student))!=NULL){/?
....
}
}
int main(int argc,字符**argv){
填充管柱、外填充管柱;
对于(inti=0;i


{
字符串标题;
getline(in,headline);//清除标题数据
}
for(std::string line;getline(in,line);){//读取所有行
学生;
std::istringstream ss{line};
ss>>student.name;
学生语言;
学生数学;
//和(学生)一起做某事
}
其他要点:

  • 尽量不要使用静态变量
  • 不要使用NULL
  • <> Li >我建议您使用C++字符串比较代替StrcMP,即代码> ARGV[I]== -O“s <代码>(在要求您使用No.Stase:Stord::<代码> > < LI>后使用<代码> >
应要求:

论元比较

#包括
#包括
#包括
int main(int argc,字符**argv){
//请注意,如果您有一个不支持字符串视图的旧编译器
//您也可以使用std::string
std::vector args(argv+1,argv+argc);//排除程序名
对于(auto s:args){//遍历args,仅适用于独立参数
如果(s==“-x”){//比较单个元素

std::cout我有点晚了,答案很好。但是,我建议添加额外的封装和重载操作符>>

#包括
#包括
#包括
班级学生{
私人:
std::字符串名;
双语;
双重数学;
公众:
friend std::istream&operator>>(std::istream&is,Student&s){
返回值为>>s.name>>s.language>>s.mathematics;
}
};
void ReadData(标准::字符串填充名){
std::ifstream in(填充名);
{
std::字符串标题;
getline(in,headline);
}
对于(学生;在>>学生;){/?
}
}

什么是编译问题?
NULL
是C….不要使用它。在.read(&student,sizeof(student))
中检查
将调用,这就足够了。而且这不会以您希望的方式读取文件。您应该使用格式化输入(
>
),而不是
read()
顺便问一下,
#include
是如何为您编译的?您使用的编译器是什么?And?适用于测试用例,但如果每行的元素数达到differ@Lasersk是的,但是你会有一个更大的设计问题。同样,你的答案也是一样的:如果元素的顺序会改变或者,他们会插入其他元素,它也会被破解……你能给出一些C++字符串比较的例子吗?t@fangjh添加了两个示例,最后一个应与您的应用程序相关