第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率
来源:互联网 发布:sql数据挖掘教程 编辑:程序博客网 时间:2024/06/05 15:37
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:电子词典
* 作 者:雷恒鑫
* 完成日期:2012 年 06 月 02 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:。将文件中的内容读到对象数组中,由用户输入英文词。
* 问题描述: 做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。
* 程序输出:显示中文释义。
* 程序头部的注释结束
运行结果:
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:电子词典
* 作 者:雷恒鑫
* 完成日期:2012 年 06 月 02 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:。将文件中的内容读到对象数组中,由用户输入英文词。
* 问题描述: 做一个简单的电子词典。在文件dictionary.txt 中,保存的是英汉对照的一个词典,词汇量近8000 个,
英文、中文释义与词性间用’\t’隔开。建一个表示词条的类Word,Word 类的一个对象可以描述一个词,
类对象数组可以存储词库。
* 程序输出:显示中文释义。
* 程序头部的注释结束
*/
#include<iostream> #include<fstream> #include<string>#include<iomanip>using namespace std; int min(int a,int b);class Word { public: Word();Word(string word,string word_meaning,string word_type);void set_word(string word);void set_word_meaning(string word_meaning);void set_word_type(string word_type);string get_word();string get_word_meaning();string get_word_type(); //friend ostream& operator << (ostream&,Word&); //重载流插入运算符“<<” ;*/private: string word;string word_meaning;string word_type;};void input_word(Word s[]);Word search(string word,Word w1[]);int main() { Word w1[8000],w2;bool key=1;string word;input_word(w1);while(key==1){cout<<"请输入您要查找的单词:";cin>>word;w2=search(word,w1);cout<<"您要查找单词的意思为:"<<w2.get_word_meaning()<<'\t'<<w2.get_word_type()<<endl;cout<<"若想继续查词请按1,结束查词请按0!";cin>>key;}system("PAUSE"); return 0; }int min(int a,int b){if(a>b)a=b;return a;}Word::Word(){word="unknow";word_meaning="unknow";word_type="unknow";}Word::Word(string word,string word_meaning,string word_type){this->word=word;this->word_meaning=word_meaning;this->word_type=word_type;}void input_word(Word s[]) { int i=0; string word;string word_meaning;string word_type;ifstream infile("dictionary.txt",ios::in);if (!infile){cerr<<"open error!"<<endl;exit(1);}for (i=0;i<8000;i++){infile>>word;s[i].set_word(word);infile>>word_meaning;s[i].set_word_meaning(word_meaning);infile>>word_type;s[i].set_word_type(word_type);}infile.close();//cout<<endl;}void Word::set_word(string word){this->word=word;}void Word::set_word_meaning(string word_meaning){this->word_meaning=word_meaning;} void Word::set_word_type(string word_type){this->word_type=word_type;}string Word::get_word(){return word;}string Word::get_word_meaning(){return word_meaning;}string Word::get_word_type(){return word_type;}Word search(string word,Word w1[]){Word w2,w3[8000];for(int h=0;h<8000;++h)w3[h]=w1[h];int i=0;int a=0,b=0,c;w2.set_word(word);string s1,s2,s3,s4;int low=0,high=7962,mid;s1=w1[low].get_word();s2=w1[high].get_word();s4=w2.get_word();mid=(low+high)/2;s3=w1[mid].get_word();while(low<=high){a=word.size();b=s3.size(); c=min(a,b);if(s3==word)return w1[mid];else if(a==b){for (i = 0;i<a; ++i) { if(s3[i]!=s4[i]){if(s3[i]<s4[i]){low=mid+1;break;}else{high=mid-1;break;}}}if(s3==s4){return w1[mid];}}else if(a!=b){for (i = 0;i<c; ++i) { if(s3[i]!=s4[i]){if(s3[i]<s4[i]){low=mid+1;break;}else{high=mid-1;break;}}if(i==(c-1)){if(s3[i-1]==s4[i-1]){high=mid-1;}}}}mid=(low+high)/2;s1=w3[low].get_word();s2=w3[high].get_word();s3=w3[mid].get_word();}cerr<<"很遗憾,查无此词!";exit(1);return w2;}
运行结果:
经验积累:
1.自我感觉还是直接用字符串从头到尾比较好一点,虽然效率有点低。
- 第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率
- 第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率(改进版)
- 第十六周实验报告任务3--电子词典
- 《第十六周实验报告任务3——电子词典》
- 第十六周C++【任务三】一个简单的电子词典
- C++程序设计实验报告(八十二)---第十六周任务#3-2(学会二分查找)
- 《C++第十六周实验报告3-1》---电子词典
- 第十六周实验报告三电子词典
- 第十六周任务三(电子词典)
- 第十六周项目3电子词典
- 第十六周项目3-电子词典
- 二分查找电子词典
- 第十六周C++【任务三】拓展一电子词典
- 第十六周项目 电子词典
- 十六周任务3;电子词典
- 做一个oop版的电子词典
- 第十六周实验报告(四)---指针做 十四周任务2
- 第十六周实验报告(任务一)
- Tinyx 交叉编译配置文件(arm版)
- java中的Overload(重载)和Override(重写)的区别(二)
- .NET下水晶报表传递数据的两种模式
- 51 单片机汇编指令的 寻址方式的通俗解析
- 《雷神的微软平台安全宝典》简介
- 第十六周实验--任务3--做一个词汇量近8000 个的电子词典--使用二分查找法提高效率
- C#入门经典学习7-调试和错误处理
- 一个模块接口的组成
- apache开启.htaccess及.htaccess的使用方法
- struts配置文件
- 【STL】ostream_iterator详解
- 低配置享受3D立体游戏 手把手教你设置
- 快速阅读
- openssl研究-1