【C++】旧键盘

题目源自PTA:

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI

 首先来理一下思路:
方法一:用两个字符串来存储原本的内容(string str)和实际的内容(string st),然后用循环来判断str[i] 能否匹配到st[j];

确实可以解决,但问题是两个循环套下来时间复杂度就会很高。因此在参考一些文章后,得到了方法二。

方法二:

原本串的长度是要比实际串的长度要长的,因此我们只用对原本字符串(str)做一次遍历即可,匹配的问题可以用find()函数解决,大小写的问题可以用toupper()函数

使用这两个函数时需要加  #include <ctype.h>

int toupper(int c)        //C 库函数 int toupper(int c) 把小写字母转换为大写字母。

  • c -- 这是要被转换为大写的字母。
  • 返回值:如果 c 有相对应的大写字母,则该函数返回 c 的大写字母,否则 c 保持不变。返回值是一个可被隐式转换为 char 类型的 int 值。

find()        //find()函数的妙用就不做过多介绍了

找到就返回第一个的索引值,找不到就返回string::npos

 这里直接看代码:
 

//旧键盘
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
int main(){
	string str;
	string st;
	//char ans[90],index=0;
	getline(cin,str);
	getline(cin,st);
	string ans;
	for(int i=0;i<str.size();i++){
		if(st.find(str[i])==string::npos&&ans.find(toupper(str[i]))==string::npos){
			ans+=toupper(str[i]);    //保证存入的结果为大写字母
		}
	}
	cout<<ans;
    cout<<endl;
    return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值