需將 26 個英文字母分別映射為 1 到 26,輸入一個單詞(如 "LOVE"),計算其字母權重之和。原代碼直接累加字符的 ASCII 碼,導致結果遠大於預期(LOVE 應為 54,實際輸出極大)。
原代碼:
for(i=0; a[i]!='\n'; i++)
sum += a[i]; // 直接累加字符編碼
這將字符 'A' (65) 等直接相加,而非映射為 1。
大寫字母:權重 = 字符 - 'A' + 1
小寫字母:權重 = 字符 - 'a' + 1
#include <stdio.h>
#include <ctype.h>
int main(void) {
char a[100];
int sum = 0, i = 0;
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
a[i++] = ch;
}
a[i] = '\0';
for (int j = 0; j < i; j++) {
char c = a[j];
if (c >= 'A' && c <= 'Z')
sum += c - 'A' + 1;
else if (c >= 'a' && c <= 'z')
sum += c - 'a' + 1;
}
printf("%d\n", sum);
return 0;
}
關鍵在於將字符轉換為對應的字母順位,而非直接使用 ASCII 碼。加上大小寫兼容處理,即可得到正確的權重和。