字串問題

一、#458 ─ The Decoder

題目:按這裡

說明:將輸入的密碼文字的每個字元加上某個整數 K,解碼成原來的文字。

首先我們先求出這個 K 出來,輸入了字母 J,而輸出字母 C,我們可以推得 K = -7 。這一題我們會用到兩個字元輸入、輸出函數 getchar()putchar(),這兩個函數如果輸入或輸出失敗,會傳回 EOF 。這一題我們就用一個 while 迴圈,每輸入一個字元,就把它解碼後輸出,而如果輸入的是換行,則不做處理直接輸出。

#include <stdio.h>

 

int main()

{

 char c;

 while(1) {

   c=getchar();

   if(c==EOF) break;

   if(c=='\n') putchar(c);

   else putchar(c-7);

 }

 return 0;

}

 

二、#10082 ─ WERTYU

題目:按這裡

說明:輸入一段文字,將它們依照鍵盤的位置,印出它們左邊的文字(空白鍵、`、Q、A、Z 等除外)。

這一題和上一題差不多,唯一不同的是修正的地方變得比較複雜,我們寫一個 Correct() 函數來處理它。而主程式改成(黃色為修改的部分):

#include <stdio.h>

 

int main()

{

 char c;

 while(1) {

   c=getchar();

   if(c==EOF) break;

   if(c=='\n') putchar(c);

   else putchar(Correct(c));

 }

 return 0;

}

由於鍵盤的位置和 ASCII 值的順序沒有關係,所以我們要用一連串的 if 來判斷它的修正後的值,例如( c 為原來的值、 r 為修正後的值):

char Correct(char c)

{

 char r;

 if(c=='1') r='`';

 if(c=='2') r='1';

 if(c=='3') r='2';

 ......

 return r;

}

我們可以把上面一連串的 if 改用 swicth 敘述,switch 敘述的語法如下:

switch(運算式) {

  case 值1:

    指令1;

    break;

  case 值2:

    指令2;

    break;

  ......

  default:

    指令N;

    break;

}

它將運算式的值計算出來後,會跳到符合該值的 case 處,然後一直執行下去,為避免執行到其他 case 的指令,我們要在指令結束後加上一行 break; 讓它離開這個 switch 敘述。

這一題,為了方便我們輸入程式,建議從鍵盤右邊往左邊打回來,可以利用快速鍵:

Shift + 方向鍵 : 反白文字

Ctrl + Insert : 複製

Shift + Insert : 貼上

Ctrl + KH :解除反白

完整的程式可以參考這裡,我們就不列出來了。

 

上一頁

首頁

下一頁