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

mrxyz 2006-06-02 09:49:59
从已经建立的文本文件中读入 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
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinall 2006-06-02
  • 打赏
  • 举报
回复
data[1] = *max_element(id.data.begin(), id.data.end());
---》
data[0] = *max_element(id.data.begin(), id.data.end());
sinall 2006-06-02
  • 打赏
  • 举报
回复
#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;
}
wolfskytwl 2006-06-02
  • 打赏
  • 举报
回复
可以试一试用CStdioFile打开/关闭文件
用ReadString每次读入一行
对每行以空格为单位区分数据
再编几个数据处理函数处理数据就行
把结果存入新文件
只是一个思路,具体可查一下MSDN
飞哥 2006-06-02
  • 打赏
  • 举报
回复
不知道楼主成什么样了
jay1002008 2006-06-02
  • 打赏
  • 举报
回复
LZ  要是我能帮一定帮你  我也不会呀。。。
healer_kx 2006-06-02
  • 打赏
  • 举报
回复
读文件,写文件。。。
yy006yy 2006-06-02
  • 打赏
  • 举报
回复
VC6.0对STL的支持有不少限制,论坛的弟兄有总结的吗?
sinall 2006-06-02
  • 打赏
  • 举报
回复
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;
}
庄鱼 2006-06-02
  • 打赏
  • 举报
回复
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;
}
yuanhan530 2006-06-02
  • 打赏
  • 举报
回复
好假,什么冰天雪地,现在是夏天!
mhisky 2006-06-02
  • 打赏
  • 举报
回复
mark
cdhit 2006-06-02
  • 打赏
  • 举报
回复
--------------------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)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧