题意:
给定两个字符串,第一个串是用来匹配的,从第二个串的第一个字符开始匹配,如果第二个串中的字符在第一个串出现,则表示猜中了,第一个串中的相同的所有字符都算被猜中;如果没有出现则表示猜错,同样的猜错只算一次。在整个匹配的过程中,如果在还没猜错7次之前,第一个串中所有的字符都被猜完了, 则输出“You win.”,如果你还没全部猜完的时候就已经猜错7次,则输出“You lose.”。如果整个匹配过程结束后,你没赢也没输,则输出“You chickened out.”。
解题:
分为三个函数,一个是主程序负责输入,一个是输出函数负责输出打印,一个是判断函数负责判断游戏
游戏判断:一旦猜错7次则输掉游戏,而在7次之前,如果需要猜的词已经结束则赢得游戏,如果还没结束且玩家已经结束输入则放弃游戏。
注意:在这个程序中一个注意事项就是怎样算赢、怎样算输、怎样算弃权,判断时必须考虑清楚
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
//成功
void print(int t,int win){//输出打印结果
if(win==0){
cout<<"Round "<<t<<endl;
cout<<"You win."<<endl;
}else if(win==1){
cout<<"Round "<<t<<endl;
cout<<"You chickened out."<<endl;
}else if(win==2){
cout<<"Round "<<t<<endl;
cout<<"You lose."<<endl;
}
}
void test(int n,string a,string b){//判断
bool c[a.size()];
for(int i=0;i<a.size();i++){//使用bool数组判断字符是否已经猜过
c[i]=true;
}
int count=0;
bool flag=false;
int j=0;
while(true){
for(int i=0;i<a.size();i++){
if(b[j]==a[i]&&c[i]){
c[i]=false;
flag=true;
}
}
if(!flag){//如果输入的字符没有一个匹配,则猜错加一
count++;
}
flag=false;
j++;
if(count>6){//如果猜错次数大于6,不过此时是否输入结束都输掉游戏
print(n,2);
return;
}
bool f=true;
for(int i=0;i<a.size();i++){
if(c[i])f=false;
}
if(f){//如果需要猜的单词已经截止,没有需要猜的位,则赢得游戏
print(n,0);
return;
}else
if(j==b.size()){//如果有单词还没猜中,且已经输入结束,则放弃游戏
print(n,1);
return;
}
}
return;
}
int main(){
int n;
cin>>n;
string c,w;
while(n!=-1){//输入
cin>>c>>w;
test(n,c,w);
cin>>n;
}
}