本題目描述一種雙重加密規則:將明文密碼轉換為密文。規則如下:
輸入多行明文(長度 ≤ 100),輸出對應密文,直到 EOF。
gets() 或 fgets())。ch + 32 + 1(轉小寫+位移)switch 對應手機按鍵數字#include <stdio.h>
#include <string.h>
int main() {
int n, i;
char t, a[101];
while (gets(a) != NULL) {
n = strlen(a);
for (i = 0; i < n; i++) {
if (a[i] >= 'A' && a[i] <= 'Y') {
a[i] = a[i] + 32 + 1; // 大寫轉小寫並後移一位
} else if (a[i] == 'Z') {
a[i] = 'a'; // Z 循環到 a
} else if (a[i] >= 'a' && a[i] <= 'z') {
t = a[i];
switch (t) {
case 'a': case 'b': case 'c': a[i] = '2'; break;
case 'd': case 'e': case 'f': a[i] = '3'; break;
case 'g': case 'h': case 'i': a[i] = '4'; break;
case 'j': case 'k': case 'l': a[i] = '5'; break;
case 'm': case 'n': case 'o': a[i] = '6'; break;
case 'p': case 'q': case 'r': case 's': a[i] = '7'; break;
case 't': case 'u': case 'v': a[i] = '8'; break;
case 'w': case 'x': case 'y': case 'z': a[i] = '9'; break;
}
}
}
puts(a);
}
return 0;
}

輸入:YUANzi1987 → 輸出:zvbo941987(符合題目說明)。
gets() 有緩衝區溢位風險,實際開發建議改用 fgets(a, sizeof(a), stdin)。