用STL做的简易英汉词典(VS2005下编写)

2024-03-13 09:32

本文主要是介绍用STL做的简易英汉词典(VS2005下编写),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// dictionary.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#include<utility>

using namespace std;
typedef map<string,vector<string>*>::value_type ValueType;
typedef map<string,vector<string>*>::iterator map_iterator;

class Dectionary
{
public:
 Dectionary()
{
 
}
 ~Dectionary()
 {
 
 }
 
void inputcitiao();//此函数用来添加词条及其解释
void outputcitiao();//此函数用来输出所有词条及其解释
void lookforcitiao();//此函数用来查找词条的解释
void modifycitiao();//此函数用来修改词条的解释
void deletecitiao();//此函数用来删除词条
void showmenu();//此函数用来显示菜单和提供选择

private: 
   map<string, vector<string>*> citiao;
};
 

inline void  Dectionary::inputcitiao()

 string s1,s2;
 cout<<"/n请输入英文词条(以输入‘#’号结束输入)"<<endl;
 cin>>s1;
 cout<<"/n请输入它的解释"<<endl;
 while(cin>>s2)
 {
  if(s2=="#")
   return;
  if(!citiao.count (s1))
    {
  vector<string>*p=new vector<string>;
  p->push_back (s2);
     citiao.insert (ValueType(s1,p));
    }
 else
    (*citiao[s1]).push_back (s2);
 }

}


inline void Dectionary::outputcitiao()
{  
 char ch;
 if(!citiao.size ())
 {cout<<"/n词典中没有任何词条"<<endl;
 return ;
 }

 cout<<"/n词条将依次输出"<<endl;
 map<string,vector<string>*>::iterator iter_begin=citiao.begin ();
 map<string,vector<string>*>::iterator iter_end=citiao.end ();
 int old_count=0;
 for(   ;iter_begin!=iter_end;++iter_begin)
 {   int count=0;
     vector<string>*p=iter_begin->second ;
  vector<string>::iterator siter_begin=p->begin ();
  vector<string>::iterator siter_end=p->end ();

  cout<<"第"<<++old_count<<"个词条"<<iter_begin->first <<"的解释为:"<<endl;
  for(   ;siter_begin!=siter_end;++siter_begin)
  {
   cout<<"("<<++count<<")"<<*siter_begin<<endl;
  }
 }
 cin>>ch;
}


inline void Dectionary::lookforcitiao()
{  
 char ch;
 cout<<"/n请输入要查找的词条"<<endl;
 string s1;
 cin>>s1;
 if(!citiao.count (s1))
 cout<<"/n没有要查找的词条"<<endl;
 else
 {
  cout<<s1<<"的解释为:"<<endl;
  vector<string>::iterator siter_begin=citiao[s1]->begin ();
  vector<string>::iterator siter_end=citiao[s1]->end ();
  string::size_type count=0;
  for( ;siter_begin!=siter_end;++siter_begin)
  {  cout<<"("<<++count<<")"<<*siter_begin<<endl;
  }
 }
 cin>>ch;
}


inline void Dectionary::modifycitiao ()
{
 cout<<"/n请输入要修改的词条"<<endl;
 string s1,s2;
 cin>>s1;
 if(!citiao.count (s1))
  cout<<"/n找不到要修改的词条"<<endl;
 else
 {
  cout<<"已经找到要修改的词条"<<s1<<endl;
  vector<string>*p=citiao[s1];
  vector<string>::iterator  siter_begin=citiao[s1]->begin ();
  vector<string>::iterator  siter_end=citiao[s1]->end ();
  vector<string>::iterator buff;
  cout<<"词条的内容为"<<endl;

        string::size_type count=0;
  int a;
  for( ;siter_begin!=siter_end;++siter_begin)
  {  cout<<"("<<++count<<")"<<*siter_begin<<endl;
  }

  cout<<"/n请输入要修改的是第几个解释"<<endl;
  cin>>a;
  while(a<0 || a>(citiao[s1]->size ()))
  {cout<<"/n没有此条解释,请重新输入"<<endl;
  cin>>a;
  }
        siter_begin=citiao[s1]->begin ();
   

        buff=p->erase(siter_begin+a-1);      //对vector<string>的删除和修改出现问题
  cout<<"/n请输入新的解释"<<endl;
  cin>>s2;
  p->insert (buff,s2);
  cout<<"/n修改后的词条解释为"<<endl;
  count=0;
        siter_begin=citiao[s1]->begin ();
        siter_end=citiao[s1]->end ();
        for( ;siter_begin!=siter_end;++siter_begin)
  {  cout<<"("<<++count<<")"<<*siter_begin<<endl;
  }

 }
}

 
inline void Dectionary::deletecitiao()
{  
 char ch;
 string s1;
 cout<<"/n请输入要删除的词条"<<endl;
 cin>>s1;
 if(!citiao.count (s1))
  cout<<"/n没有指定要删除的词条"<<endl;
 else
 {
  if(citiao.erase (s1))
   cout<<"/n删除成功"<<endl;
  else
   cout<<"/n删除不成功"<<endl;
 }
 cin>>ch;
}

inline void Dectionary:: showmenu()
{    
 char ch;
 cout<<"********************************欢迎进入本词典系统******************************"<<endl;
 
 cout<<"                                1.添加新的词条                                   "<<endl;
 cout<<"                                2.查询词条                                       "<<endl;
 cout<<"                                3.按字母顺序输出所有词条                         "<<endl;
 cout<<"                                4.删除一个词条                                   "<<endl;
 cout<<"                                5.修改一个词条                                   "<<endl;
 cout<<"********************************请选择操作**************************************"<<endl;
 cout<<endl;
 int a;
 cin>>a;
 while(a<1 || a>5)
 {
  cout<<"没有这个选项,请重新选择"<<endl;
  cin>>a;
 }
 switch(a)
 {
 case 1:
   inputcitiao();
      break;
 case 2:
      lookforcitiao();
   break;
 case 3:
      outputcitiao();
   break;
 case 4:
      deletecitiao();
   break;
 case 5:
      modifycitiao();
   break;
 }

    system("cls");
 cout<<"/n要退出本系统吗?按Y(y)退出系统,按N(n)回到菜单;"<<endl;

 cin>>ch;
 while(!(ch=='y'||ch=='Y'||ch=='N'||ch=='n'))
 cin>>ch;
 if(ch=='y'||ch=='Y')
 return;
 else
 showmenu();
 
}

 

 

int _tmain(int argc, _TCHAR* argv[])
{
 Dectionary dc;
 dc.showmenu ();
 return 0;
}

 

/*程序心得:
(1)map中的元素是按照规定的次序排列的,而不是按照你的输入顺序排列,这就省了我写一个排序的函数
还害我写了半天这个排序函数,还错误百出;
(2)buff=p->erase(siter_begin+a-1); 和p->insert (buff,s2);在运行的时候突然中断
原因是:在for循环里面的时候siter_begin改变了,要重新设置siter_begin的值。这是个低级的错误。但是要注意的是
顺序容器vector在调用成员函数erase和insert的时候会使所有的迭代器失效,所以后面要恢复
siter_begin和siter_end的值,才能够最后显示修改后的词条内容。(effective STL的内容)


*/
 

这篇关于用STL做的简易英汉词典(VS2005下编写)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804399

相关文章

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用PyQt实现简易文本编辑器

《使用PyQt实现简易文本编辑器》这篇文章主要为大家详细介绍了如何使用PyQt5框架构建一个简单的文本编辑器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录分析主窗口类 (MyWindow)菜单操作语法高亮 (SyntaxHighlighter)运行程序主要组件代码图示分析实现

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

用Java打造简易计算器的实现步骤

《用Java打造简易计算器的实现步骤》:本文主要介绍如何设计和实现一个简单的Java命令行计算器程序,该程序能够执行基本的数学运算(加、减、乘、除),文中通过代码介绍的非常详细,需要的朋友可以参考... 目录目标:一、项目概述与功能规划二、代码实现步骤三、测试与优化四、总结与收获总结目标:简单计算器,设计

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

通过C#和RTSPClient实现简易音视频解码功能

《通过C#和RTSPClient实现简易音视频解码功能》在多媒体应用中,实时传输协议(RTSP)用于流媒体服务,特别是音视频监控系统,通过C#和RTSPClient库,可以轻松实现简易的音视... 目录前言正文关键特性解决方案实现步骤示例代码总结最后前言在多媒体应用中,实时传输协议(RTSP)用于流媒体服

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo