题目:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
思路:1、将理论输入和实际输入读取,并将其中的小写字母转换成大写字母;
2、lack[i] 对应应该输入 string in_should 中第 i个字符是否实际输出情况,若lack[i]==0,表示未输出,==1,表示已输出
3、遍历实际输入 string in_fact,将其字符在理论输入中找到, 并将对应的 lack[i] = 1;
4、将lack[i] = 0 的字符输出,注意同一字符可能重复输出,应避免;
代码:
#include<iostream>
#include<string>
using namespace std;
void small_to_big(string& a) //小写字母变为大写字母
{
for(int i=0; i<a.size(); i++)
{
if(a[i]>='a' && a[i]<='z')
a[i] -= 32;
}
}
int main()
{
string in_should;
string in_fact;
cin >> in_should >> in_fact;
small_to_big(in_fact);
small_to_big(in_should);
int lack[in_should.size()] = {0};
for(int i=0; i<in_fact.size(); i++) //遍历应该输入字符串和实际输入字符串,
{ //将应该输入中有,且实际输入中有的,在数组中标记1.
for(int j=0; j<in_should.size(); j++)
{
if(in_should[j] == in_fact[i])
lack[j] = 1;
}
}
string out;
for(int i=0; i<in_should.size(); i++) //输出未标1的;
{
if(lack[i]==0)
{
int j=0;
for(; j<out.size() && out[j]!=in_should[i]; j++);
if(out[j]!=in_should[i])
{
out += in_should[i];
}
}
}
for(int i=0; i<out.size(); i++)
cout << out[i];
return 0;
}