心得:
1.字符串每个字符是char类型
2.char类型可以认为是整数类型,和int一样,甚至97=='a'是对的,只不过char存数字的时候会有一个映射,将存的数字转换成对应的字符
3.转大小写有一个tolower和toupper,直接cout输出是数字,所以想变成字符,需要char映射
4.algorithm有一个transform(),也能变大小写,transform(iterator beg1, iterator end1, iterator beg2, _func);
//beg1 源容器开始迭代器, //end1 源容器结束迭代器, //beg2 目标容器开始迭代器, //_func 函数或者函数对象,目标迭代器也可以是自身,就是改变自己
所以自己转大写就是transform(s.begin(),s.end(),s.begin(),::toupper),小写是::tolower
题目:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
思路:
从给出的字符串取出每一个字符,用它在实际被输入的字符串中找,没找到就是坏键,由于不区分大小写,也就是不管大写小写,只要没有就是坏键,所以可以将两个字符串都转成大写
用一个vector存坏键,存之前还要判断是否已经存在了这个坏键,如果已经存在的话就不用存了
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool in_this_string(char a,string test)
{
int pos;
pos=test.find(a,0);
if(pos!=test.npos)
return true;
else
return false;
}
bool in_this_vector(char a,vector<char>v)
{
auto it=find(v.begin(),v.end(),a);
if(it!=v.end())
return true;
else
return false;
}
int main()
{
string tested,reality;
vector<char> vec;
cin>>tested>>reality;
transform(tested.begin(),tested.end(),tested.begin(),::toupper);
transform(reality.begin(),reality.end(),reality.begin(),::toupper);
for(int i=0;i<tested.size();i++)
{
if(!in_this_string(tested[i],reality))
{
if(!in_this_vector(tested[i],vec))
vec.push_back(tested[i]);
}
}
for(int i=0;i<vec.size();i++)
cout<<vec.at(i);
return 0;
}