1. 程式人生 > >【算法筆記】B1029 舊鍵盤

【算法筆記】B1029 舊鍵盤

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 舊鍵盤