PTA A1084 Broken keyboard(20分)

题目click me~

题意:给出两个字符串,第一个为原本想要输出的字符串,第二个是坏键盘实际输出的字符串。

解题思路

需要解决两个问题:

1.如何在英文字母不区分大小写的情况下判断哪些字符在第一个串中出现却没在第二个串中出现。

2.如何保证一个字符只输出一次,且英文字母全用大写。

步骤一:对于第一个问题,枚举第一个字符串中的字符,对当前枚举字符c1,枚举第二个字符串中的字符c2,若遇到小写字母,则全部转换成大写。之后判断c1和c2是否相等,若相等,说明在第二个字符串中出现过,不予输出;若不相等,继续枚举下一个c2,若对于c1无法在第二个字符串中找到相等的,则需要输出c1.

步骤二:对于第二个问题,设置一个hashtable【128】表示字符是否已经被输出。

code

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int main() {
	char str1[100], str2[100];
	bool hashta[128] = { false };
	cin >> str1 >> str2;
	int len1 = strlen(str1), len2 = strlen(str2);
	for (int i = 0;i < len1;i++) {
		char c1, c2;
		int j;
		for (j = 0;j < len2;j++) {
			c1 = str1[i];
			c2 = str2[j];
			if (c1 >= 'a'&&c1 <= 'z')c1 = c1 - 32;
			if (c2 >= 'a'&&c2 <= 'z')c2 = c2 - 32;
			if (c1 == c2)break;
		}
		if (j == len2 && hashta[c1]==false) {//hashta下标直接是字符的ascii码值
			cout << c1;
			hashta[c1] = true;
		}
	}
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值