用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

相关文章

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j