时间: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来判断是否单词中有多个该字母。