C++入门编程之成语接龙

您所在的位置:网站首页 怎么描述成语接龙 C++入门编程之成语接龙

C++入门编程之成语接龙

2024-07-08 10:46| 来源: 网络整理| 查看: 265

成语接龙问题

问题描述:

题目描述:成语接龙是中华民族传统的文字游戏。它有着悠久的历史,也有广泛的社会基础,是老少皆宜的民间文化娱乐活动。请设计四字成语接龙游戏。 功能需求: (1) 计一个四字成语类Idiom,包含成语内容,首字母的拼音,末尾字母 的拼音。 (2) 设计一个成语接龙游戏类Game,系统可以判断用户的回答是否是成语,并且可以按照前一个成语,判断是否接龙成功。如果回答的成语接龙正确,则以新的成语作为新的起点,继续接龙;如果不成功,继续为原有的成语接龙。 (3) 设计提示功能,引导用户接龙成功。 (4) 使用外部文件存储相关数据。

开发环境:

Dev C++

解题思路: 使用外部文件储存,创建一个.txt文件来储存成语,组成成语数据库,用fstream类导入成语库。分别用两个ifstream,声明出两个变量,分别储存成语与拼音,放在Idiom类里。再定义出一个Game类,声明出6个函数。  matchIfidiom函数,用来匹配是否为成语。  matchIfcatch函数,用来检测是否接龙。  matchIfexist函数,用来检测是否在游戏里存在出现过的成语。  pointOut函数,用来做提示功能。  printOut函数,用来输出结果。  gameStart函数,用来启动游戏。  String exist成语,用来储存出现过的成语在gameStart函数里,根据玩家输入1或2来决定是否退出或者提示。 这个项目中最关键的一点就是,第一次输入的成语必须是一个四字成语,否则直接退出。于是,提示功能只能在第二轮输入开始才能使用。在每次输入成语后,printOut函数都会检测是否为四字成语,是否存在出现的成语(当第二次输入时)。当用户需要提示时,输入“2”,printOut函数将输进来的idiom又赋值为上一个成语(因为“2”不是成语,这也是需要第二次输入才能使用提示功能的原因)。gameStart函数里声明出一个变量idiom,用来给用户输入成语,然后传入printOut函数输入结果。由于需要判断是否接龙,于是在函数里面加入判断语句if(),把idiom放入matchIfcatch函数里,如果不接龙,则实现if语句里面的内容。 程序设计: #include #include #include using namespace std; int tag2; class Idiom{ public: ifstream a; ifstream b; string allidiom; Idiom() { a.open("1.txt"); b.open("1.txt"); while(getline(a,idiom1)) { allidiom+=idiom1.substr(0,8);//储存每行的成语 } while(getline(b,idiom2,'#')) { pos1=idiom2.find(":")+2; pinyin+=idiom2.substr(pos1);//储存每行的拼音 } a.close(); b.close(); } private: string idiom1; string idiom2; string pinyin; int pos1; }; class Game:public Idiom{ public: bool matchIfidiom(string,string); //检测是否为四字成语 bool matchIfcatch(string,string); //检测是否接龙 void gameStart(); //开始游戏 string pointOut(string); //提示功能 void printOut(string); //输出是否为四字成语 bool matchIfexist(string); //检测是否出现同一个成语 string exist; // 用来储存出现过的成语 }; bool Game::matchIfidiom(string idiom,string eachidiom)//检测是否为四字成语 { if(eachidiom.compare(idiom)==0 ) return true; return false; } bool Game::matchIfcatch(string lastidiom,string idiom)//检测是否接龙 { string first_i=idiom.substr(0,2); string end_i=lastidiom.substr(6,8); if(first_i.compare(end_i)==0) return true; else return false; } bool Game::matchIfexist(string idiom)//检测是否出现同一个成语 { int pos=exist.find(idiom); //通过find()函数当exist中含有idiom成语时 则查询失败则返回 string::npos if(pos!=string::npos) return true; return false; } void Game::gameStart()//开始游戏 { string idiom;//玩家成语 string lastidiom;//储存上一次的成语(从第二个成语开始) int tag1=0;//标记从第二个开始 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3