PAT-乙级B1014-福尔摩斯密码-处理字符串(有坑)

#include <stdio.h>
int main()
{
    int i, count=0, count1=0, b[70];
	char a1[70], a2[70], a3[70], a4[70], week[10][5]={"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
	scanf("%s %s %s %s", a1, a2, a3, a4);   //若干个字符串存入二维数组
	//printf("%s\n%s\n%s\n%s\n", a1, a2, a3, a4);      //测试代码
	
	for (i=0; a1[i]!='\0' && a2[i]!='\0'; i++) {
		if (count==0) {        //找第一对相同大写字母
			if (a1[i]==a2[i] && a1[i]>='A' && a1[i]<='G'){    //第一个字母范围是A-G,一开始忽略了是到G
		        count++;
			    b[1]=a1[i]-'A';    //b[1]存第一个相同的大写字母
			    //printf("%c\n", b[count]);    //测试代码
			}
		}else {               //第二对相同的字符可以是大写字母或数字,一开始忽略了第二对可以是数字
			if (a1[i]==a2[i] && ((a1[i]>='0' && a1[i]<='9') || (a1[i]>='A' && a1[i]<='N'))) {   //字符范围是0-9或A-N
			    count++;
				if (a1[i]<='9') b[count]=a1[i]-'0';    //如果是数字
				else b[count]=a1[i]-'A'+10;           //如果是字母
			}
		}
	}

	for (i=0; a3[i]!='\0' && a4[i]!='\0'; i++) {
	    if (a3[i]!=a4[i]) count1++;     //如果字符不同
		else if (a3[i]<'A' || (a3[i]>'Z' && a3[i]<'a') || a3[i]>'z') count1++;   //如果字符相同,但不是英文,一开始忽略了限定条件是英文
		else break;
	}

	printf("%s %02d:%02d", week[b[1]], b[2], count1);    //count1记录相同字符出现在第几个
}

1、第一个字母范围是A-G,一开始忽略了是到G,以为是到Z。

2、第二对相同的字符可以是大写字母或数字,一开始忽略了第二对可以是数字。

3、第三个字符范围是英文字母。

4、字符可以直接四则运算以及比大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值