测试点2错的来:1033 旧键盘打字 (20分)
生活随笔
收集整理的這篇文章主要介紹了
测试点2错的来:1033 旧键盘打字 (20分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用更少的代碼做更高效的表達
PAT乙級最優題解——>傳送門
舊鍵盤上壞了幾個鍵,于是在敲一段文字的時候,對應的字符就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入格式:
輸入在 2 行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過 10
?5
?? 個字符的串。可用的字符包括字母 [a-z, A-Z]、數字 0-9、以及下劃線 _(代表空格)、,、.、-、+(代表上檔鍵)。題目保證第 2 行輸入的文字串非空。
注意:如果上檔鍵壞掉了,那么大寫的英文字母無法被打出。
輸出格式:
在一行中輸出能夠被打出的結果文字。如果沒有一個字符能被打出,則輸出空行。
輸入樣例:
7+IE.
7_This_is_a_test.
輸出樣例:
_hs_s_a_tst
解題思路: 定義一個數組a置0, 輸入s1,s2字符串, 對于s1中出現的每一個字符, 分三種情況,將對應的a值置1:
- 如果是字母, 則將對應的大小寫字母都置1, 如: a['A'] = 1; a['a'] = 1;
- 如果是+(表示shift鍵壞了), 則將所有大寫字母置1
- 如果是其他, 則直接置1
最后遍歷s2串,對于a[s2[i]] = 0 的值進行輸出即可。
測試點2出錯:需要用getline輸入字符串(在PAT里, cin輸入字符串有很多bug, 有很多時候并不是樣例過不了,就是單純的因為用了cin輸入字符串)
代碼展示
#include<bits/stdc++.h> using namespace std; int a[300]; int main() {string s1, s2;getline(cin, s1);getline(cin, s2);for(int i = 0; i < s1.length(); i++) {if(isalpha(s1[i])) {a[toupper(s1[i])] = 1;a[tolower(s1[i])] = 1; // a[s1[i]] = 1; } else if(s1[i] == '+') {for(int i = 'A'; i <= 'Z'; i++) a[i] = 1;} else {a[s1[i]] = 1;}}int len2 = s2.length();for(int i = 0; i < len2; i++) {if(a[s2[i]] == 0) cout << s2[i];}cout << '\n'; return 0; }每日一句
每日零星的變好,最后也會如星河般閃耀。
總結
以上是生活随笔為你收集整理的测试点2错的来:1033 旧键盘打字 (20分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1032 挖掘机技术哪家强 (20分)—
- 下一篇: 1036 跟奥巴马一起编程 (15分)—