保小求大002

字符串04-石头剪刀布

题目描述:
石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。

游戏规则:石头打剪刀,布包石头,剪刀剪布。

现在,需要你写一个程序来判断石头剪子布游戏的结果。

输入:
输入包括N+1行:
第一行是一个整数N,表示一共进行了N次游戏。1 <= N <= 100。
接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石头、剪子或者是布):
S1 S2
字符串之间以空格隔开S1,S2只可能取值在{“Rock”, “Scissors”, “Paper”}(大小写敏感)中。

输出:
输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平局,则输出Tie。

样例输入:

3
Rock Scissors
Paper Paper
Rock Paper

样例输出:

Player1
Tie
Player2

代码如下:

#include<iostream>
#include<map>//定义映射函数的头文件
#include<cstring>
using namespace std;
int main() {
	map<string, int>a;//定义名字为a的映射函数,串映射到数字
	//0-Rock, 1-Scissors, 2-Paper 
	a["Rock"] = 0;
	a["Scissors"] = 1;
	a["Paper"] = 2;
	int n;
	string s1, s2;
	cin >> n;
	while (n--) {
		cin >> s1 >> s2;
		//做比较时,表示形式为:映射函数名[字符串名]
		if ((a[s1] == 0 && a[s2] == 1) || 
			(a[s1] == 1 && a[s2] == 2) ||
			(a[s1] == 2 && a[s2] == 0)) {
				cout << "Player1" << endl;
			}
		else if ((a[s1] == 0 && a[s2] == 2) || 
			(a[s1] == 1 && a[s2] == 0) ||
			(a[s1] == 2 && a[s2] == 1)){
				cout << "Player2" << endl;
			}
		else cout << "Tie" << endl;
	}
	return 0;
}

字符串05-输出亲朋字符串

题目描述:
编写程序,求给定字符串s的亲朋字符串s1。

亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符; 给定字符串s的第二个字符的ASCII值加第三个字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二个字符。亲朋字符串的最 后一个字符由给定字符串s的最后一个字符ASCII值加s的第一个字符的ASCII值。

输入:
输入一行,一个长度大于等于2,小于等于100的字符串。字符串中每个字符的ASCII值不大于63。

输出:
输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。

样例输入:

1234

样例输出:

cege

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    string a,b;
    //cin>>a;  //使用cin报错
    getline(cin,a);//读入字符串a
    int len = a.length();
    for(int i = 0;i < len;i++){
        if(i == len-1){
        	//a[i]为int类型,b为string类型
            b = a[i]+a[0];
        }
        else
            b = a[i]+a[i+1];
        cout<<b;
    }
    return 0;
}

说明:
当读入一串含有空格的字符串的时候,cin是干不了的,因为cin读不了空格。
遇到这种情况时,引入getline()函数,这个函数有三个参数,第一个是输入流如cin,第二个是写入的地方,第三个是输入结束标志,就是告诉程序遇到什么字符停止读入,也可以不写,默认遇到回车符停止读入。如:

#include <iostream>
using namespace std;
int main()
{
    string a;
    getline(cin,a,'\n');
    cout<<a;
} 

一般写成getline(cin,a)。

#include <iostream>
using namespace std;
int main()
{
    string a;
    getline(cin,a);
    cout<<a;
} 

getline()只能用于string类,要读char的一串,就要用cin.getline()。

#include <iostream>
using namespace std;
int main()
{
    char a[90];
    cin.getline(a,80);
    cout<<a;
} 

字符串06-合法C标识符

题目描述:
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。

C语言标识符要求:

  1. 非保留字;

  2. 只包含字母、数字及下划线(“_”)。

  3. 不以数字开头。

输入:
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。

输出:
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。

样例输入:

RKPEGX9R;TWyYcp

样例输出:

no

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int flag;
    string s;
    cin>>s;
    for(int i = 0;s[i];i++){
        if(s[0] >= '0' && s[0] <= '9'){
            flag = 0;
            break;
        }
        else if((s[i] >= 'A' && s[i] <= 'Z') 
        || (s[i] >= 'a' && s[i] <= 'z') 
        || (s[i] >= '0' && s[i] <= '9')
        || s[i] == '_'){
            flag = 1;
        }
        else{
            flag = 0;
            break;
        }
    }
    if(flag == 1){
        cout<<"yes"<<endl;
    }
    else
        cout<<"no"<<endl;
    return 0;
}

说明:
使用循环方法解决问题时一定要想到break,break作用是跳出循环。
本题中,当第一个字符为数字时,执行语句flag=0之后,如果不使用break跳出循环,i增加进入接下来的循环,后面的字符满足条件就会改变flag的值。只要最后一个字符满足要求,flag的值就为1,可见这样的判断是错误的。
if(表达式1)…else if(表达式2)…else: 依次执行表达式1,表达式2…只要碰到一个表达式为真,则执行该if中的语句,后面的表达式不再被计算,若所有表达式都为假,则执行else中的语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值