热门标签 | 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
更好一点,用的不熟凭印象都混了。

推荐阅读
  • Logistic回归主要针对输入的数据是多个,输出则是有限的数值型,多为2个分类。涉及到以下方面:1.输出yw0+w1*x1+w2*x2+..(x1,x2,是样本的 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • ImimplementingacustomlexerinC++andwhenattemptingtoreadinwhitespace,theifstreamwont ... [详细]
  • wyh2000andastringproblemTimeLimit:20001000MS(JavaOthers)MemoryLimit:13107265 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 深入解析 C 语言与 C++ 之间的差异及关联
    深入解析 C 语言与 C++ 之间的差异及关联 ... [详细]
  • C++中没有提供string类型的大小写转换,今天写了一下,方法很多#include<iostream>#include<string>#inclu ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
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社区 版权所有