CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

冰天雪地裸体大跪求——C++流文件编程

楼主mrxyz()2006-06-02 09:49:59 在 C/C++ / C++ 语言 提问

从已经建立的文本文件中读入   N行,M列的字符及数字(每行都有字符和数字,中间用空格隔开,每行末尾有回车),经过处理后按X行,Y列输出到另一文本文件里.  
  例如:磁盘文件的初试数据为:  
  1   abc     8.8     9.3     7.9     8.7     8.9     9.7     9.2  
  2   def     8.9     8.2     8.6     8.8     8.5     9.1     9.3  
  3   gc       8.9     8.4     8.7     8.6     8.6     8.4     8.6  
  经过处理后屏幕显示及磁盘文件中的结果均为:  
  号码     姓名   最大值   最小值     总分       平均值  
  1           abc       9.7           7.9       44.9         8.98  
  2           def       9.3           8.2       43.9         8.78  
  3           gc         8.9           8.4       42.9         8.58  
  问题点数:60、回复次数:13Top

1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-06-02 10:03:26 得分 0

读文件,写文件。。。Top

2 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-02 10:25:28 得分 0

读--〉处理   --〉写  
  这么说是不是简单了  
  不过现在天气很热啊,怎么还冰天雪地裸体。。。。。。Top

3 楼jay1002008(jay)回复于 2006-06-02 10:30:00 得分 0

LZ  要是我能帮一定帮你  我也不会呀。。。Top

4 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-06-02 10:30:04 得分 0

不知道楼主成什么样了Top

5 楼wolfskytwl(谈谈)回复于 2006-06-02 11:32:16 得分 10

可以试一试用CStdioFile打开/关闭文件  
  用ReadString每次读入一行  
  对每行以空格为单位区分数据  
  再编几个数据处理函数处理数据就行  
  把结果存入新文件  
  只是一个思路,具体可查一下MSDN  
  Top

6 楼sinall()回复于 2006-06-02 11:51:00 得分 0

#include   <string>  
  #include   <vector>  
  #include   <iostream>  
  #include   <fstream>  
  #include   <algorithm>  
  #include   <numeric>  
  using   namespace   std;  
   
  class   OutputData;  
   
  class   InputData  
  {  
          friend   class   OutputData;  
          friend   ifstream&   operator>>(ifstream&   is,   InputData&   id);  
          friend   ostream&   operator<<(ostream&   os,   const   InputData&   id);  
  public:  
          InputData()  
                  :   num(0),  
                      data(size)  
          {  
          }  
          InputData(const   InputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(id.data)  
          {  
          }  
          InputData&   operator=(const   InputData&   id)  
          {  
                  num   =   id.num;  
                  name   =   id.name;  
                  data   =   id.data;  
          }  
  private:  
          static   const   int   size   =   7;  
          int   num;  
          string   name;  
          vector<float>   data;  
  };  
   
  class   OutputData  
  {  
          friend   ostream&   operator<<(ostream&   os,   const   OutputData&   id);  
          friend   ofstream&   operator<<(ofstream&   os,   const   OutputData&   id);  
  public:  
          explicit   OutputData(const   InputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(size)  
          {  
                  data[1]   =   *max_element(id.data.begin(),   id.data.end());  
                  data[1]   =   *min_element(id.data.begin(),   id.data.end());  
                  data[2]   =   accumulate(id.data.begin(),   id.data.end(),   0.0);  
                  data[3]   =   accumulate(id.data.begin(),   id.data.end(),   0.0)/id.data.size();  
          }  
          OutputData(const   OutputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(id.data)  
          {  
          }  
          OutputData&   operator=(const   OutputData&   id)  
          {  
                  num   =   id.num;  
                  name   =   id.name;  
                  data   =   id.data;  
          }  
  private:  
          static   const   int   size   =   4;  
          int   num;  
          string   name;  
          vector<float>   data;  
  };  
   
  int   main(void)  
  {  
          ifstream   input("in.txt");  
          ofstream   output("out.txt");  
   
          vector<InputData>   id_list;  
          for   (   ;   !input.eof();   )   //   不知道为什么会多出来一行,楼主可判断下id.num来确定是否输出到out.txt  
          {  
                  InputData   id;  
                  input   >>   id;  
                  id_list.push_back(id);  
   
                  output   <<   OutputData(id);  
   
                  cout   <<   id;  
          }  
   
          return   0;  
  }  
   
  ifstream&   operator>>(ifstream&   is,   InputData&   id)  
  {  
          is     >>   id.num   >>   id.name;  
          for   (vector<float>::iterator   i   =   id.data.begin();   i   !=   id.data.end();   ++i)  
          {  
                  is   >>   *i;  
          }  
   
          return   is;  
  }  
   
  ostream&   operator<<(ostream&   os,   const   InputData&   id)  
  {  
          os     <<   "num   :   "   <<   id.num   <<   endl  
                  <<   "name   :   "   <<   id.name   <<   endl;  
          return   os;  
  }  
   
  ostream&   operator<<(ostream&   os,   const   OutputData&   id)  
  {  
          os     <<   "num   :   "   <<   id.num   <<   endl  
                  <<   "name   :   "   <<   id.name   <<   endl;  
          return   os;  
  }  
   
  ofstream&   operator<<(ofstream&   os,   const   OutputData&   id)  
  {  
          os     <<   id.num   <<   "   "  
                  <<   id.name   <<   "   ";  
          for   (vector<float>::const_iterator   i   =   id.data.begin();   i   !=   id.data.end();   ++i)  
          {  
                  os   <<   *i   <<   "   ";  
          }  
          os   <<   endl;  
   
          return   os;  
  }  
  Top

7 楼sinall()回复于 2006-06-02 11:53:19 得分 0

data[1]   =   *max_element(id.data.begin(),   id.data.end());  
  ---》  
  data[0]   =   *max_element(id.data.begin(),   id.data.end());Top

8 楼cdhit(积极态度)回复于 2006-06-02 14:40:18 得分 0

--------------------Configuration:   sinall   -   Win32   Debug--------------------  
  Compiling...  
  sinall.cpp  
  C:\Documents   and   Settings\sinall\sinall.cpp(35)   :   error   C2258:   illegal   pure   syntax,   must   be   '=   0'  
  C:\Documents   and   Settings\sinall\sinall.cpp(35)   :   error   C2252:   'size'   :   pure   specifier   can   only   be   specified   for   functions  
  C:\Documents   and   Settings\sinall\sinall.cpp(69)   :   error   C2258:   illegal   pure   syntax,   must   be   '=   0'  
  C:\Documents   and   Settings\sinall\sinall.cpp(69)   :   error   C2252:   'size'   :   pure   specifier   can   only   be   specified   for   functions  
  C:\Documents   and   Settings\sinall\sinall.cpp(97)   :   error   C2248:   'num'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(36)   :   see   declaration   of   'num'  
  C:\Documents   and   Settings\sinall\sinall.cpp(97)   :   error   C2248:   'name'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(37)   :   see   declaration   of   'name'  
  C:\Documents   and   Settings\sinall\sinall.cpp(98)   :   error   C2248:   'data'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(38)   :   see   declaration   of   'data'  
  C:\Documents   and   Settings\sinall\sinall.cpp(98)   :   error   C2248:   'data'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(38)   :   see   declaration   of   'data'  
  C:\Documents   and   Settings\sinall\sinall.cpp(108)   :   error   C2248:   'num'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(36)   :   see   declaration   of   'num'  
  C:\Documents   and   Settings\sinall\sinall.cpp(109)   :   error   C2248:   'name'   :   cannot   access   private   member   declared   in   class   'InputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(37)   :   see   declaration   of   'name'  
  C:\Documents   and   Settings\sinall\sinall.cpp(115)   :   error   C2248:   'num'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(70)   :   see   declaration   of   'num'  
  C:\Documents   and   Settings\sinall\sinall.cpp(116)   :   error   C2248:   'name'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(71)   :   see   declaration   of   'name'  
  C:\Documents   and   Settings\sinall\sinall.cpp(122)   :   error   C2248:   'num'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(70)   :   see   declaration   of   'num'  
  C:\Documents   and   Settings\sinall\sinall.cpp(123)   :   error   C2248:   'name'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(71)   :   see   declaration   of   'name'  
  C:\Documents   and   Settings\sinall\sinall.cpp(124)   :   error   C2248:   'data'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(72)   :   see   declaration   of   'data'  
  C:\Documents   and   Settings\sinall\sinall.cpp(124)   :   error   C2248:   'data'   :   cannot   access   private   member   declared   in   class   'OutputData'  
                  C:\Documents   and   Settings\sinall\sinall.cpp(72)   :   see   declaration   of   'data'  
  Error   executing   cl.exe.  
   
  sinall.obj   -   16   error(s),   0   warning(s)  
  Top

9 楼mhisky(不见不散)回复于 2006-06-02 14:42:42 得分 0

markTop

10 楼yuanhan530(千年※ 蜗牛)回复于 2006-06-02 14:44:13 得分 0

好假,什么冰天雪地,现在是夏天!Top

11 楼FreeFice(庄鱼)回复于 2006-06-02 15:11:05 得分 50

C大致步骤如下:  
  FILE   *in   =   fopen(fin,"rt");  
  FILE   *out   =   fopen(fout,"w+t");  
  int   i;  
  char   s[40]={0};  
  float   v[7],sum,av,max,min;  
  while(fscanf(in,"%d   %s   %f   %f   %f   %f   %f   %f   %f",&i,s,&v[0],&v[1],&v[2],&v[3],&v[4],&v[5],&v[6]")!=EOF){  
      sum   =   v[0]+v[1]+v[2]+v[3]+v[4]+v[5]+v[6];  
      av   =   sum   /   7;  
      max   =   Max(v);  
      min   =   Min(v);  
      fprintf(out,"%4d\t%32s\t%3.1f\t%3.1f\t%4.1f\t%4.2f",i,s,max,min,sum,av);}  
  fclose(in);  
  fclose(out);  
   
  Max、Min的实现:  
  float   Max(float   v[7])  
  {  
        float   a=   v[0];  
        for(int   i=1;i<7;i++)  
            if(a<v[i])  
                a   =   v[i];  
        return   a;  
  }  
  float   Min(float   v[7])  
  {  
        float   a=   v[0];  
        for(int   i=1;i<7;i++)  
            if(a>v[i])  
                a   =   v[i];  
        return   a;  
  }Top

12 楼sinall()回复于 2006-06-02 15:19:17 得分 0

vc6.0的问题。  
  唉……  
  这下大家可满足了吧?  
   
  #include   <string>  
  #include   <vector>  
  #include   <iostream>  
  #include   <fstream>  
  #include   <algorithm>  
  #include   <numeric>  
  using   namespace   std;  
   
  class   InputData  
  {  
          friend   class   OutputData;  
          friend   ifstream&   operator>>(ifstream&   is,   InputData&   id);  
          friend   ostream&   operator<<(ostream&   os,   const   InputData&   id);  
  public:  
          InputData()  
                  :   num(0),  
                      data(size)  
          {  
          }  
          InputData(const   InputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(id.data)  
          {  
          }  
          InputData&   operator=(const   InputData&   id)  
          {  
                  num   =   id.num;  
                  name   =   id.name;  
                  data   =   id.data;  
  return   *this;  
          }  
  private:  
          enum  
  {  
  size   =   7,  
  };  
          int   num;  
          string   name;  
          vector<float>   data;  
  };  
   
  class   OutputData  
  {  
          friend   ostream&   operator<<(ostream&   os,   const   OutputData&   id);  
          friend   ofstream&   operator<<(ofstream&   os,   const   OutputData&   id);  
  public:  
          explicit   OutputData(const   InputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(size)  
          {  
                  data[1]   =   *max_element(id.data.begin(),   id.data.end());  
                  data[1]   =   *min_element(id.data.begin(),   id.data.end());  
                  data[2]   =   accumulate(id.data.begin(),   id.data.end(),   0.0);  
                  data[3]   =   accumulate(id.data.begin(),   id.data.end(),   0.0)/id.data.size();  
          }  
          OutputData(const   OutputData&   id)  
                  :   num(id.num),  
                      name(id.name),  
                      data(id.data)  
          {  
          }  
          OutputData&   operator=(const   OutputData&   id)  
          {  
                  num   =   id.num;  
                  name   =   id.name;  
                  data   =   id.data;  
  return   *this;  
          }  
  private:  
          enum  
  {  
  size   =   4,  
  };  
          int   num;  
          string   name;  
          vector<float>   data;  
  };  
   
  int   main(void)  
  {  
          ifstream   input("in.txt");  
          ofstream   output("out.txt");  
   
          vector<InputData>   id_list;  
          for   (   ;   !input.eof();   )   //   不知道为什么会多出来一行,楼主可判断下id.num来确定是否输出到out.txt  
          {  
                  InputData   id;  
                  input   >>   id;  
                  id_list.push_back(id);  
   
                  output   <<   OutputData(id);  
   
                  cout   <<   id;  
          }  
   
          return   0;  
  }  
   
  ifstream&   operator>>(ifstream&   is,   InputData&   id)  
  {  
          is     >>   id.num   >>   id.name;  
          for   (vector<float>::iterator   i   =   id.data.begin();   i   !=   id.data.end();   ++i)  
          {  
                  is   >>   *i;  
          }  
   
          return   is;  
  }  
   
  ostream&   operator<<(ostream&   os,   const   InputData&   id)  
  {  
          os     <<   "num   :   "   <<   id.num   <<   endl  
                  <<   "name   :   "   <<   id.name   <<   endl;  
          return   os;  
  }  
   
  ostream&   operator<<(ostream&   os,   const   OutputData&   id)  
  {  
          os     <<   "num   :   "   <<   id.num   <<   endl  
                  <<   "name   :   "   <<   id.name   <<   endl;  
          return   os;  
  }  
   
  ofstream&   operator<<(ofstream&   os,   const   OutputData&   id)  
  {  
          os     <<   id.num   <<   "   "  
                  <<   id.name   <<   "   ";  
          for   (vector<float>::const_iterator   i   =   id.data.begin();   i   !=   id.data.end();   ++i)  
          {  
                  os   <<   *i   <<   "   ";  
          }  
          os   <<   endl;  
   
          return   os;  
  }  
  Top

13 楼yy006yy()回复于 2006-06-02 15:29:15 得分 0

VC6.0对STL的支持有不少限制,论坛的弟兄有总结的吗?Top

相关问题

关键词

得分解答快速导航

  • 帖主:mrxyz
  • wolfskytwl
  • FreeFice

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo