我猜我猜猜猜!

时间:2022-05-15 01:08:31

编程,在大家的呼吁下重出江湖了!对编程爱好者无疑是个好消息。在编程上,我们主要面向初、中学习者,把一个程序讲透,讲明白。大家也可以多投稿,让CFan为编程爱好者们建立一个友好的学习平台。

我是一名计算机专业的学生,早就考过计算机等级考试二级C++了。C++是我认为最优秀的编程语言,要让自己学得更快更好,我有一些经验。

首先要舍得花时间,并且要能钻进去,找出编程的乐趣;将概念搞懂,多与老师、同学或爱好者讨论,对典型的例子一定要懂,然后模仿,就能熟能生巧;做大量实际的练习是必不可少的,可以多用C++来进行编程,提高自己的实战能力。开始是非常痛苦的,一定要坚持,坚持就是胜利!

今天,我们要用C++来写一个简单的猜字母游戏。我们先来了解游戏规则。

1.每次只能猜一个字母;

2.限制猜错的次数;

3.猜错的字母将被记录;

4.每次猜测后,显示出已猜出字母、猜错的字母和余剩的机会;

5.假如猜的字母在单词中,单词中所有的该字母将被视为已猜出,如单词是high,我们猜出了h,则程序应显示为h--h。

程序设计:.cn/index.php/76976/action_viewspace_itemid_104893

学前准备

首先,我们应考虑怎样记录单词,其中包括原单词、猜错的字母、当前猜出的残缺单词。C++中带有一个功能强大的string类,它的声明在头文件string中。

小提示

string类是一个比较智能的类,它能够自动调整字符串的长度,这样,我们就不用担心浪费空间或者输入字符串超出对象末尾了。

构造函数 说明

string(const char* b) 将string对象初始化为字符串b

string(size_type n,char b) 将对象初始化为有n个元素的对象,它们都是字符b

string(const string& str,size_type pos=0,size_type n=npos) 将对象初始化为str中,从第pos个元素开始的n个元素

最后,要实现拼字游戏,必须在对象中查找字符。string类已经提供了这方面的函数。

方法 说明

size_type find(char ab,size_type pos=0)const; 从字符串的pos位置开始,查找字符ab,若找到,返回第一个ab所在的索引,否则,返回string::npos。

size_type find(const string& str,size_type pos=0)const; 从字符串的pos位置开始,查找字符串str,若找到,返回str的首字母所在索引,否则返回string::npos。

size_type find (const char* a,size_type pos=0)const; 从字符串的pos位置开始,查找字符串a,若找到,返回s的首字母所在索引,否则返回string::npos。

小提示

若temp是一个string对象,内容为“high”,则temp.find('h')将返回1,即第一个字符h对应的索引。

重点程序分析

判断字母已被猜过

if(badguess.find(guess)!=string::npos||

player.find(guess)!=string::npos)

{

cout

continue;

}

因为如果字母被猜过,那么它要么在玩家猜出的残缺单词中,要么处于错误字母集合中,我们用find函数在这两处分别进行了搜索。

对于猜错后的处理

int temp=first.find(guess);

if(temp==string::npos)

{

cout

guesses--;

badguess+=guess;

}//猜错后的处理

先查找这个字符是否在单词中出现。如果没有出现,find函数将返回string::npos。npos是一个常量,比string能存储的最大元素数多1。如果没有出现,我们会将猜错的机会减去一次,再用了这个代码:badguess+=guess;将错误的字母加入到badguess对象中。

该字母是否有多个

temp=first.find(guess,temp+1);

while(temp!=string::npos)

{

player[temp]=guess;

temp=first.find(guess,temp+1);

}

最后,如果temp不是string::npos,那么说明我们猜对了。但可能这个单词中有多个这样的字母,所以,能过temp!=string::npos来判断是否单词中有多个该字母。

上一篇:网上炒股存隐患 八项注意保平安(上) 下一篇:两步解决VMware两大难题