统计文本文件中的单词
题目
统计一个文本文件中的各个单词数量,假定
- 假定已经存在一个文本文件“words.txt”,其内容为多个单词,各单词之间以空格分割;
- 打开这个文件,搜索全部单词;
- 获取各个单词、个数以及单词总数量并显示出来;
算法分析
- 定义存放单词和个数的单词类;
- 定义单词类数组;
- 打开文件读;
- 循环读取一个单词,如果文件结束关闭文件;
- 保存单词及个数,并统计单词总数量;
- 关闭文件对象;
- 显示各单词和个数以及单词总数量;
实现
class wordtype
{
char word[20];
int count;
};
int getwords(wordtype *words){
ifstream in("words.txt");
if(!in)
{
cout<<"文件打开错误!"<<endl;
return 1;
}
int n=0;
char word[20];
int m;
while(in)
{
in >> word;
if(!in)
{
break;
}
bool flag=false;
for(m=0; m<n; m++)
{
if(!strcmp(word,words[m].word))
{
words[m].count++;
flag = true;
break;
}
}
if(!flag)
{
words[m].count = 1;
strcpy(words[m].word,word);
n++;
}
}
in.close();
return n;
#include <iostream>
#include <fstream>
using namespace std;
int getwords(wordtype *words);
int main()
{
wordtype words[100] = {"", 0};
int n = getwords(words);
cout<<"英文单词统计结果如下:"<<endl;
for(int m=0; m<n; m++)
{
cout<<words[m].word<<':'<<words[m].count<<endl;
}
cout<<"搜索出共"<<n<<"个单词。"<<endl;
return -1;
}
文本文件输入步骤小结
- 包含文件流类头文件:
#include<fstream> - 打开文件读:
ifstream in("words.txt"); - 读文件:
in>>str; - 用完关闭文件流:
in.close();
复制MP3二进制文件
题目
复制一个MP3二进制文件到另一个文件中
算法分析
- 输入原始文件和目标文件名;
- 分别按照读方式打开原始文件,按照写方式打开目标文件;
- 循环每次读取原始文件256字节,如果文件结尾则关闭原始文件和目标文件;
- 将实际读取的字节写入目标文件之中,转上一步 ;
- 关闭原始文件和目标文件;
二进制文件操作的方法
- 二进制文件打开方式为:
ios::binary ofstream fout(szDestFile, ios::binary); // 写打开 ifstream fin(szOrigFile, ios::binary); // 读打开 - 定位文件开始:
fin.seekg(0L,ios::beg); - 读文件内容:
fin.read(szBuf, sizeof(char) * 256) - 实际读文件的内容长度:
int length=fin.gcount(); - 写文件内容:
fout.write(szBuf, length); - 读写文件过程中错误判断:
if (fout.bad()) - 文件结尾判断:
while(!fin.eof()) - 关闭文件对象:
fout.close(); // 关闭目标文件 fin.close(); // 关闭原始文件
二进制文件复制模块代码
bool mp3cpy(const char * szDestFile, const char * szOrigFile)
{
ofstream fout(szDestFile, ios::binary);
ifstream fin(szOrigFile, ios::binary);
bool bRet = true;
if (fin.bad())
{
bRet = false;
}
else
{
fin.seekg(0L,ios::beg);
while(!fin.eof()){
char szBuf[256] = {0};
fin.read(szBuf, sizeof(char) * 256);
int length=fin.gcount();
if (fout.bad())
{
bRet = false;
break;
}
fout.write(szBuf, length);
}
}
fout.close();
fin.close();
return bRet;
主函数测试
#include <iostream>
#include <fstream>
using namespace std;
bool mp3cpy(const char * szDestFile, const char * szOrigFile);
int main()
{
char szOrigFile[50];
char szDestFile[50];
cout<<"请输入原始文件名和目标文件名:";
cin>>szOrigFile;
cin>>szDestFile;
bool bRet=mp3cpy(szDestFile,szOrigFile);
if(bRet)
{
cout<<"文件复制成功!"<<endl;
}
else
{
cout<<"文件复制失败!"<<endl;
}
return -1;
}
二进制文件输入输出主要步骤小结
- 包含文件流类头文件:
#include<fstream> - 打开文件读:
ifstream fin("a.mp3", ios::binary); - 打开文件写:
ofstream fout("b.mp3", ios::binary); - 读文件:
fin.read(szBuf, length); - 写文件:
fout.write(szBuf, length); - 用完关闭文件流:
fin.close(); fout.close();
学生成绩统计管理系统
题目
- 有四个学生信息文本文件,内容分别如下:
- 第一个文件是学号、姓名、班级等基本信息;
- 第二个文件是学号和高数成绩;
- 第三个文件是学号和大英成绩;
- 第四个文件是学号和计算机成绩。
- 请将这些文件按学号匹配合并为一个新的文本文件,新文件的每行内容如下:
- 学生学号、姓名、班级、高数成绩、大英成绩、计算机成绩和平均成绩
学生信息类
class Student {
public:
int no;
string name;
string classname;
float math;
float english;
float computer;
float average;
};
读取学生成绩文件函数
float getscore(string filename,int stdno)
{
int stdno_temp;
float score;
ifstream in(filename.c_str());
if( !in )
{
cout<<"文件打开错误。"<<endl;
return 0;
}
bool flag=false;
while(in)
{
in>>stdno_temp>>score;
if(in)
{
if(stdno_temp==stdno)
{
flag=true;
break;
}
}
}
if(!flag)
{score=0;}
in.close();
return score;
}
学生信息写文件运算符重载函数
ostream & operator << (ostream & out, Student & student)
{
out<<student.no<<'\t'<<student.name <<'\t'<<student.classname;
out<<'\t'<<student.math;
out<<'\t'<<student.english;
out<<'\t'<<student.computer;
out<<'\t'<<student.average;
out<<endl;
}
算法分析
- 定义学号、姓名、班级、高数成绩、大英成绩、计算机成绩和平均成绩变量;
- 分别以读方式打开四个原始数据文件和以写方式打开一个目标文件;
- 循环从四个原始数据文件中依次读取学号、姓名、班级、高数成绩、大英成绩和计算机成绩,并计算平均成绩。读取出错时关闭文件;
- 将这些信息写入目标文件中,重复上一步骤;
- 关闭所有文件
主函数测试
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream in("info.txt");
ofstream out("student.txt");
if( !in || !out )
{
cout<<"文件打开错误。"<<endl;
return 1;
}
out<<"学号\t\t姓名\t班级\t高数\t大英\t计算机\t平均"<<endl;
while(in)
{
Student student;
in>>student.no>>student.name>>student.classname;
if(!in)
{
break;
}
student.math=getscore("math.txt",student.no);
student.english=getscore("english.txt",student.no);
student.computer=getscore("computer.txt",student.no);
student.average=(student.math+student.english+student.computer)/3;
out<<student;
}
out.close();
in.close();
cout<<"student.txt文件建立成功,请查阅!"<<endl;
return 1;
}
|