1. 程式人生 > >PAT乙級1029舊鍵盤

PAT乙級1029舊鍵盤

題目描述:
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。

輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線 _(代表空格)組成。題目保證 2 個字串均非空。

輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。

輸入樣例:
7_This_is_a_test
_hs_s_a_es
輸出樣例:
7TI

程式碼如下:

#include <iostream>
#include <cctype>
using namespace std;

int main()
{
    string a,b,sum;
    cin>>a>>b;
    for(int i=0,j=0;i<a.size();i++){
            if(a[i]==b[j]) {
                    j++;
                    continue;
            }
            if(a[i]!=
b[j]) { if(islower(a[i])) a[i]=char(toupper(a[i])); if(isdigit(a[i])&&sum.find(a[i])==-1) { cout<<a[i]; sum+=a[i]; } if(!isdigit(a[i])&&sum.find(a[i])==-1) { cout<<
char(toupper(a[i])); sum+=a[i]; } } } return 0; }

來總結一下:
1)讓b和a一個一個對應著找,sum用來存已經輸出過的字元,輸出之前先判斷它有沒有輸出過。
2)find函式,如果找到了,則返回第一個找到的位置,否則返回-1。
幾個小用法:

  1. s1.find(s2);在s1中找子串s2。
  2. s1.find(s2, 2) ; 從S1的第二個字元開始查詢子串S2