冰天雪地裸体大跪求——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




