热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++从文件中逐行读取结构体数据,并将其存储到向量中,最终输出至控制台和新文件

在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢!
c++


文档A中每一行都是一个struct,最后几个数字的数量是不一定的,需要把每一行都放入vector然后输出到屏幕,并且也输出到新建的文档B中。求指教,谢谢! 

struct hero
{
  string name;
  int age;
  char sex;
  double weight;
  string color;
  vector number;
};

4 个解决方案

#1


没有找到你提的问题,你是要请人帮你完成这个任务?还是任务中碰到了什么问题?

#2


// CPP文件读写.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
using namespace std;

const string inFileName="testData.txt";
const string outFileName="outData.txt";

struct Hero
{
string name;
int age;
char sex;
double weight;
string color;
vector number;
};

vector heroList;

int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin;
fin.open(inFileName.c_str(),ios::in);
if(!fin.is_open())
{
cout<<"打开文件"< exit(1);
}

ofstream fout;
fout.open(outFileName.c_str(),ios::out);
if(!fout.is_open())
{
cout<<"创建文件"< exit(1);
}

string line;
getline(fin,line);
while(line.length()>0) //>20
{
istrstream ss(line.c_str());
Hero aHero;
ss>>aHero.name>>aHero.age>>aHero.sex>>aHero.weight>>aHero.color;
cout< fout<
int num;
do
{
ss>>num;
aHero.number.push_back(num);
cout<<'\t'< fout<<'\t'< }while(ss.good());

// ss.clear();
cout< fout< heroList.push_back(aHero);
getline(fin,line);
}

fin.close();
fout.close();
return 0;
}

#3


修改了一下,
while(line.length()>0) //>8 最小长度可能是9,包括5个字段,4个Tab字符或者空格
还有,后面不定数量的数字可能是0个,改成 while(ss.good())
// CPP文件读写.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
using namespace std;

const string inFileName="testData.txt";
const string outFileName="outData.txt";

struct Hero
{
string name;
int age;
char sex;
double weight;
string color;
vector number;
};

vector heroList;

int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin;
fin.open(inFileName.c_str(),ios::in);
if(!fin.is_open())
{
cout<<"打开文件"< exit(1);
}

ofstream fout;
fout.open(outFileName.c_str(),ios::out);
if(!fout.is_open())
{
cout<<"创建文件"< exit(1);
}

string line;
getline(fin,line);
while(line.length()>0) //>8
{
istrstream ss(line.c_str());
Hero aHero;
ss>>aHero.name>>aHero.age>>aHero.sex>>aHero.weight>>aHero.color;
cout< fout<
int num;
while(ss.good())
{
ss>>num;
aHero.number.push_back(num);
cout<<'\t'< fout<<'\t'< }

// ss.clear();
cout< fout< heroList.push_back(aHero);
getline(fin,line);
}

fin.close();
fout.close();
return 0;
}

#4


应该用
istringstream ss(line);
代替
istrstream ss(line.c_str());
头文件由strstream 改成 sstream
更好一点,用的不熟凭印象都混了。

推荐阅读
author-avatar
miedao1592_460
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有