【算法筆記】B1029 舊鍵盤
阿新 • • 發佈:2019-03-19
problem 數組 超過 pre strlen span 重復 chan 設置 1029 舊鍵盤 (20 分)
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字符就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字符的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線 _
(代表空格)組成。題目保證 2 個字符串均非空。
輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。
輸入樣例:
7_This_is_a_test _hs_s_a_es
輸出樣例:
7TI
思路:
設置一個初值為0的標記數組s[100],字符轉換成數字後作為數組下標,如果是小寫字母則減32。
字符串2出現過的字符在s[100]中相應的位置上標記1。
最後遍歷字符串1,如果沒有被標記則輸出。輸出過的字符也標記1,避免重復輸出。
CODE:
#include<iostream> #include<cstring> using namespace std;
int change(char c){ if((c - ‘a‘) >= 0) return c - ‘0‘ - 32; return c - ‘0‘; } int main(){ char s[100]={0}, str1[100], str2[100]; cin>>str1>>str2;
//遍歷字符串2並標記 for(int i = 0; i < strlen(str2); i++){ int t = change(str2[i]); s[t] = 1; }
//遍歷字符串1並輸出 for(int i = 0; i < strlen(str1); i++){ int t = change(str1[i]);char key = t + ‘0‘; if(s[t] == 0){ cout<<key; s[t] = 1;//防止重復 } } return 0; }
【算法筆記】B1029 舊鍵盤