cpe練習筆記 UVa10222 Decode the Mad man




題目大意
總之就是解碼

輸入
包含一條測試案例

輸出
將測試輸入對應鍵盤左邊兩格輸出

程式碼

#include <stdio.h>
#include <stdlib.h>

//printf("%d",(sizeof(set)/sizeof(*set)));
//注意set中的'',第一個表示跳脫符號(''具有特殊意義),第二個表示真的''

char set[47]="1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./"; //對應鍵盤

int decode(char c){ 
 int i=0;
 for(i=0;i<46;i++){
  if(c==set[i]){
   if((i-2)>0){
    return set[(i-2)];
   }
   else{
    return set[i];
   }
  }  
 }
 return -1;
}

void lower(char input[]){
 int i = 0;
 for(i=0;i<1024;i++){
  if(input[i]>=65 && input[i]<=90){
   input[i]=input[i]+32;
  }
 }
}

int main(){ 
 char input[1024]="";
 int i,tmp;
 while(fgets(input,1024,stdin)!=NULL){
  lower(input);
  for(i=0;i<1024;i++){
   tmp=decode(input[i]);
   if(tmp!=-1)  
    input[i]=tmp;
  }
  printf(input);
 }
 return 0;
}



解題概念
1. 將鍵盤順序先存入一陣列
2. 將輸入放進陣列比對
3. 輸出陣列索引值-2的陣列值

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料