【1084】Broken Keyboard (20 分)
【摘要】
https://pintia.cn/problem-sets/994805342720868352/problems/994805382902300672
输入格式:
7_This_is_a_test_hs_s_a_es
输出格式:
7TI
【大致思路】 分别读入两个字符串,第一个fo...
https://pintia.cn/problem-sets/994805342720868352/problems/994805382902300672
输入格式:
-
7_This_is_a_test
-
_hs_s_a_es
输出格式:
7TI
【大致思路】
分别读入两个字符串,第一个for循环枚举第一个字符串,内部嵌套的第二个for枚举第二个字符串,如果是小写字母则都转化为大写,若c1在第二个字符串中出现,则跳出内层for循环;内层for循环结束时,如果第二个字符串未出现c1,且c1未被输出过,则输出c1。
对于上面的判断c1是否输出过:hashtable数组元素为false时则代表c1未被输出过;而如果输出c1后则令对应的hashtable[c1]=true。
【2个关键点】
(1)在不分大小写英文下,判断在第一个字符串中出现,但在第二个字符串中没出现的字符。
(2)同一个字符(不区分大小写)在最后均用大写字母输出一次。
-
#include<iostream>
-
#include<stdio.h>
-
#include<stdlib.h>
-
#include<string>
-
#include<algorithm>
-
using namespace std;
-
注意是两个"有联系"的字符串的比较
-
另外,可用bool型字数组HashTable[]表示字符是否已经输出
-
-
int main(){
-
string str1,str2;
-
bool HashTable[128]={false}; //HashTable数组用来标记字符是否已被输出
-
getline(cin,str1);
-
getline(cin,str2);
-
int len1=str1.length();
-
int len2=str2.length();
-
for(int i=0;i<len1;i++){ //枚举第一个字符串中的每个字符
-
int j;
-
char c1,c2;
-
for(j=0;j<len2;j++){ //枚举第二个字符串的每个字符
-
c1=str1[i];
-
c2=str2[j];
-
if(c1 >= 'a' && c1 <= 'z') c1-=32; //如果是小写字母,则转化为大写
-
if(c2 >= 'a' && c2 <= 'z') c2-=32; //如果是小写字母,则转化为大写
-
if(c1 == c2) break; //如果c1在第二个字符串中出现,则跳出
-
}
-
if( j == len2 && HashTable[c1] == false) {
-
printf("%c",c1); //在第二个字符串中未出现c1,且c1未被输出过
-
HashTable[c1]=true;
-
}
-
}
-
system("pause");
-
return 0;
-
}
注意点
(1)空格也作为需要判断的字符;
(2)大小写不区分,且小写字母均输出其大写形式;
(3)HashTable数组的大小只要能把题目给出的字符包括即可——一般可直接设置ASCII码的个数128作为数组的长度。
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/99069158
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)