1. 程式人生 > >例題 3-2

例題 3-2

題目:

把手放在鍵盤上時,稍不注意就會往右錯一位。這樣,輸入Q會變成輸入W,輸入
J會變成輸入K等。輸入一個錯位後敲出的字串(所有字母均大寫),輸出打字員本來想打出的句子。輸入保證合法,即一定是錯位之後的字串。例如輸入中不會出現大寫字母A。

樣例輸入:

O S,GOMR YPFSU/

樣例輸出:

I AM FINE TODAY.


書上給的程式碼,寫了一遍然而並沒有出現樣例的輸入和輸出。
書上原始碼:

#include <stdio.h>

char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"
; int main(){ int i, c ; while((c = getchar()) != EOF){ for(i = 1; s[i] && s[i] != c; i++){ if(s[i]) putchar(s[i-1]); else putchar(c); } } return 0; }

然後,在網上找的了這個程式碼

#include "iostream"
#include "cstdio"
using namespace std;
char a[
] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; int main(){ int i,c; while ((c = getchar())!=EOF){ for(i = 1; a[i];i++){ if(c == a[i]){ break; // 在字串中尋找c 如果相等就保留下標,在下面處理 } } if(a[i]){ cout << a[i-1] ;
// 找到輸出前一個 } else{ cout << c ; } } return 0; } --------------------- 作者:SihgYu 來源:CSDN 原文:https://blog.csdn.net/qq_37866486/article/details/81388599 版權宣告:本文為博主原創文章,轉載請附上博文連結!

執行的時候發現,當輸入空格時,下一行輸出會出現空格的ASCII碼。然後改動了一下,感覺是輸出問題。

#include "iostream"
#include "cstdio"
using namespace std;
char a[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main(){
    int i,c;
    while ((c = getchar())!=EOF){
        for(i = 1; a[i];i++){
            if(c == a[i]){
                break; // 在字串中尋找c 如果相等就保留下標,在下面處理
            }
        }
        if(a[i])
            printf("%c",a[i-1]); // 找到輸出前一個
        else{
            printf("%c",c);
        }
    }
    return 0;
}