ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1033 旧键盘打字 (20 分)

2021-12-03 23:02:13  阅读:210  来源: 互联网

标签:20 string int 打字 cin should bad 1033 getline


原题

https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672

代码

测试点2考察第1行输入的空白字符串。题目保证第2行输入的文字串非空。,不保证第1行。
从别人哪里看的,太坑了。getline允许string为空,而cin不允许

#include <iostream>
using namespace std;

int temp[128]={0};
int main() {   
    string bad,input;
    // cin>>bad>>input;不正确
    getline(cin,bad);
    getline(cin,input);    
    bool flag=false;
    
    for(int i=0;i<bad.size();i++){
        if(bad[i] == '+') flag = true;
        //对应英文字母的坏键以大写给出
        if(bad[i]>='A'&&bad[i]<='Z') temp[bad[i]+('a'-'A')]++;
        temp[bad[i]]++;       
    }
    for (int i = 0; i < input.size(); i++)
    {
        if(temp[input[i]]==0){
            if(flag&&input[i]>='A'&&input[i]<='Z')//不输出大写
            continue;
            else
                cout <<input[i];
        }
    }
    return 0;
}

柳大佬的代码
学到:
npos可以表示string的结束位子,是string::type_size 类型的,也就是find()返回的类型。
find函数在找不到指定值得情况下会返回string::npos
int toupper(int c) 把小写字母转换为大写字母。
int isupper(int c) 检查所传的字符是否是大写字母。

#include <iostream>
#include <cctype>
using namespace std;
int main() {
  string bad, should;
  getline(cin, bad);
  getline(cin, should);
  for (int i = 0, length = should.length(); i < length; i++) {
    if (bad.find(toupper(should[i])) != string::npos) continue;
    if (isupper(should[i]) && bad.find('+') != string::npos) continue;
    cout << should[i];
  }
  return 0;
}

标签:20,string,int,打字,cin,should,bad,1033,getline
来源: https://www.cnblogs.com/InifiteVictory/p/15640480.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有