PAT乙级1029 旧键盘
方法1:
#include <cstdio>
#include <string.h>
#include<iostream>
#include <algorithm>
#include<math.h>
using namespace std;
int main()
{
string s1;
string s2;
getline(cin,s1);
getline(cin,s2);
int index1=0,index2=0;
int a[128] = {0};
while(index1<s1.size() && index2<s2.size())
{
if(s1[index1]>='a' && s1[index2]<='z')
s1[index1]-=32;
if(s2[index2]>='a' && s2[index2]<='z')
s2[index2]-=32;
if(s1[index1]==s2[index2])
{
index1++;
index2++;
}
else
{
if(a[s1[index1]-'\0']==0)
{
printf("%c",s1[index1]);
a[s1[index1]-'\0']=1;
}
index1++;
}
}
for(;index1<s1.size();index1++)
{
if(s1[index1]>='a' && s1[index2]<='z')
s1[index1]-=32;
if(a[s1[index1]-'\0']==0)
{
printf("%c",s1[index1]);
a[s1[index1]-'\0']=1;
}
}
return 0;
}
tips:先把小写字母转成大写字母再操作分析时会容易很多
检查点4应该是类似于:
abcdef
abcd
输出结果:EF
方法2:
#include <cstdio>
#include <string.h>
#include<iostream>
#include <algorithm>
#include<math.h>
using namespace std;
int main()
{
int a[37] = {0};
string s1;
string s2;
getline(cin,s1);
getline(cin,s2);
//标记s1中的每个字符
for(int i=0;i<s1.size();i++)
{
if(s1[i]>='a' && s1[i]<='z')
{
a[s1[i]-'a']=1;
}
if(s1[i]>='A' && s1[i]<='Z')
{
a[s1[i]-'A']=1;
}
if(s1[i]>='0' && s1[i]<='9')
{
a[s1[i]-'0'+26]=1;
}
if(s1[i]== '_')
{
a[36]=1;
}
}
//标记成功输入(s2)的每个字符
for(int i=0;i<s2.size();i++)
{
if(s2[i]>='a' && s2[i]<='z')
{
a[s2[i]-'a']++;
}
if(s2[i]>='A' && s2[i]<='Z')
{
a[s2[i]-'A']++;
}
if(s2[i]>='0' && s2[i]<='9')
{
a[s2[i]-'0'+26]++;
}
if(s2[i]== '_')
{
a[36]++;
}
}
//遍历s1进行输出
for(int i=0;i<s1.size();i++)
{
if(s1[i]>='a' && s1[i]<='z')
{
if(a[s1[i]-'a']==1)
{
printf("%c",'A'+s1[i]-'a');
a[s1[i]-'a']=0;
}
}
if(s1[i]>='A' && s1[i]<='Z')
{
if(a[s1[i]-'A']==1)
{
printf("%c",s1[i]);
a[s1[i]-'A']=0;
}
}
if(s1[i]>='0' && s1[i]<='9')
{
if(a[s1[i]-'0'+26]==1)
{
printf("%c",s1[i]);
a[s1[i]-'0'+26]=0;
}
}
if(s1[i]== '_')
{
if(a[36]==1)
{
printf("_");
a[36] = 0;
}
}
}
return 0;
}