1029 舊鍵盤——C/C++實現
阿新 • • 發佈:2018-12-01
題目
1029 舊鍵盤 (20 point(s))
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在 2 行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過 80 個字元的串,由字母 A-Z(包括大、小寫)、數字 0-9、以及下劃線
_
(代表空格)組成。題目保證 2 個字串均非空。輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文字母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有 1 個壞鍵。
輸入樣例:
7_This_is_a_test _hs_s_a_es
輸出樣例:
7TI
演算法
程式碼1是逐個字元進行比對,如果比對的次數達到s2字串的長度,說明沒找到,存起來;反之找到。當然在此之前,可以把字串都先轉化為大寫,容易比對。
程式碼2則是巧妙地使用s.find()函式,程式碼極為精簡凝練!!!
程式碼
1、C
//PAT1028V2 #include <stdio.h> #include <string.h> int main(){ char s1[80]; char s2[80]; int s3[128]={0}; int i,j,count=0; scanf("%s\n%s",&s1,&s2); for(i=0;i<strlen(s1);i++){ s1[i]=toupper(s1[i]); } for(i=0;i<strlen(s2);i++){ s2[i]=toupper(s2[i]); } for(i=0;i<strlen(s1);i++){ for(j=0;j<strlen(s2);j++){ if(s1[i]==s2[j]){ break; } else{ count++; if(count==strlen(s2)){ char tmp=s1[i]; int m=tmp; if(!s3[m]){ s3[m]=1; printf("%c",m); } } } } count=0; } for(i=0;i<128;i++){ if(s3[i]){ } } }
2、C++
#include <iostream> #include <cctype> using namespace std; int main(){ string s1,s2,ans; cin>>s1>>s2; for(int i=0;i<s1.length() ;i++) //如果s2中找不到s1的字元並且s1字元也不在ans中,就存進ans。string::npos表示查詢到最後 if(s2.find(s1[i])==string::npos &&ans.find(toupper(s1[i]))==string::npos) ans+=toupper(s1[i]); cout<<ans; return 0; }