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

C語言字符循環移位:大小寫字母表環形處理與ASCII碼運算

     編輯:程式設計綜合問答

題目

輸入一字符,判斷是否字母。非字母提示錯誤。字母則輸出下一字符(c→d,Z→A),大小寫不變。

標準解法

#include 

int main() {
    char ch;
    printf("請輸入一個字符: ");
    scanf(" %c", &ch); // 空格跳過換行符
    
    if (ch >= 'A' && ch <= 'Z') {           // 大寫字母
        ch = (ch - 'A' + 1) % 26 + 'A';     // 環形移位
        printf("下一字符: %c\n", ch);
    } else if (ch >= 'a' && ch <= 'z') {    // 小寫字母
        ch = (ch - 'a' + 1) % 26 + 'a';
        printf("下一字符: %c\n", ch);
    } else {
        printf("輸入的字符不是字母\n");
    }
    return 0;
}

核心公式解析

ch = (ch - base + offset) % 26 + base;
// ch - base     : 字符在字母表中的偏移量 (0-25)
// + offset      : 移位量 (題目為1)
// % 26          : 模運算實現環形循環 (Z+1→A)
// + base        : 偏移量轉回ASCII碼

常見錯誤

  1. scanf("%c")讀到殘留換行符:用scanf(" %c")(格式串前加空格)或getchar()清理緩衝區。
  2. 用switch處理字符範圍:switch只能匹配離散常量,不能匹配區間,需用if-else。
  3. 直接ch++:'Z'+1 = '['(ASCII 91),非'A'。
  4. 忽略大小寫保持:需分開處理大小寫基準'A'/'a'。

擴展:任意偏移量函數

char shiftChar(char ch, int offset) {
    if (ch >= 'A' && ch <= 'Z') 
        return (char)((ch - 'A' + offset % 26 + 26) % 26 + 'A');
    if (ch >= 'a' && ch <= 'z') 
        return (char)((ch - 'a' + offset % 26 + 26) % 26 + 'a');
    return ch; // 非字母原樣返回
}
// 測試
shiftChar('Z', 1)  → 'A'
shiftChar('a', -1) → 'z'
shiftChar('m', 13) → 'z' (ROT13)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved