第十六周C++【任务三】一个简单的电子词典
2012-06-04 22:28
330 查看
【任务3】电子词典
做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
拓展1(选做):允许用户运行程序后,连续地查词典,直到输入”0000”结束。
拓展2(选做):试着做一个窗口版的电子词典。
拓展3(选做):使这个词典,读入一篇文章,输出其中的所有名词(或动词,或全部实词)。——
搜索引擎用类似的功能,用于筛去虚词,因为并不是所有词都值得索引。
积累经验:
二分法是个难点,但有问题找百度,对解决问题很有帮助。
做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。将文件中的内容读到对象数组中,由用户输入英文词,显示中文释义。
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
拓展1(选做):允许用户运行程序后,连续地查词典,直到输入”0000”结束。
拓展2(选做):试着做一个窗口版的电子词典。
拓展3(选做):使这个词典,读入一篇文章,输出其中的所有名词(或动词,或全部实词)。——
搜索引擎用类似的功能,用于筛去虚词,因为并不是所有词都值得索引。
#include <iostream> using namespace std; #include <fstream> #include <string> class Word { public: void get_cixing(string cixing); void get_chinese(string english); void get_english(string chinese); friend void find_word(Word *t); friend void input_word(Word *t); friend void output_word(Word *t); private: string cixing; string english; string chinese; }; void Word::get_cixing(string cixing) { this->cixing = cixing; } void Word::get_chinese(string english) { this->english = english; } void Word::get_english(string chinese) { this->chinese = chinese; } void input_word(Word *t) { string cixing; string english; string chinese; int i; ifstream inFile("dictionary.txt",ios::in); if(!inFile) { cerr<<"open error!"<<endl; exit(1); } for(i=0;i<8000;++i) { inFile>>chinese; t[i].get_chinese(chinese); inFile>>cixing; t[i].get_cixing(cixing); inFile>>english; t[i].get_english(english); } inFile.close(); } void output_word(Word *t) { string cixing; string english; string chinese; ofstream outFile("dic.txt",ios::out); if(!outFile) { cerr<<"open dic.txt error!"<<endl; exit(1); } for(int i=0;i<8000;++i) { outFile<<t[i].chinese; outFile<<t[i].english; outFile<<t[i].cixing; } outFile.close(); } void find_word(Word *t) { int f=0; int s=7999; int mid=(f+s)/2; string word; cin>>word; while(f<s&&t[mid].english!=word) { if(t[mid].english<word) f=mid+1; if(t[mid].english>word) s=mid-1; mid=f+(s-f)/2; if(t[mid].english==word) { cout<<t[mid].chinese<<endl; cout<<t[mid].cixing<<endl; } } if(t[mid].english!=word) cout<<"没有查到"<<endl; } int main() { Word t[8000]; input_word(t); find_word(t); output_word(t); system("pause"); return 0; }
积累经验:
二分法是个难点,但有问题找百度,对解决问题很有帮助。
相关文章推荐
- 第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率(改进版)
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- C++第5周任务【任务2】本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为第10章做运算符重载等积累些感性认识。
- 第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率
- 一个简单地C++ Unit Test framework
- Java--第十三周实验--任务0--编写一个简单的Java应用程序
- 一个C++线程池的简单实现
- 一个简单的日志函数C++
- [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- C++实现的一个简单两个大数相加程序!
- 第十周C++【任务3】建立一个Point(点)类,派生出一个Circle(圆)类,派生出一个Cylinder(圆柱体)类
- [Unity实战]一个简单的任务系统(一)
- C++封装一个简单的线程类
- C++反汇编揭秘1 – 一个简单C++程序反汇编解析 (Rev. 3)
- 079-一个简单的定时计划任务
- 用c++写一个简单的计算器程序
- 用C++编写一个随机产生多个两位数四则运算式子的简单程序
- qt qml和c++交互的一个简单例子
- 一个简单的c++/cli中委托与事件的处理模型
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)