首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言計算單詞權重和:字母對應 1~26 的正確實現

     編輯:程式設計疑難解答

題目回顧

需將 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;
}

測試驗證

  • 輸入 "LOVE" → L(12)+O(15)+V(22)+E(5) = 54 ✔
  • 輸入 "abc" → 1+2+3 = 6 ✔

總結

關鍵在於將字符轉換為對應的字母順位,而非直接使用 ASCII 碼。加上大小寫兼容處理,即可得到正確的權重和。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved