首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言實現十六進制字符串加一:原地修改與大寫轉換

     編輯:關於C

問題描述

給定一個十六進制字符串(如 "AfeE0f"),將其視為無符號整數加 1,結果仍以十六進制字符串形式輸出(大寫)。例如 "AfeE0f" → "AFEE10"。

核心算法

  1. 統一大寫:調用 toupper 將輸入字符串轉為大寫,簡化後續判斷。
  2. 從右向左處理進位:從最低位(字符串末尾)開始,若為 'F' 置 '0' 並向前進位;否則字符碼 +1 後結束循環。
  3. 原地修改:直接在原字符數組上操作,無需額外空間。

完整代碼

#include \
#include \
#include \
#include \

void StringAdd1(char *str);  // 十六進制字符串加 1\
void Upstr(char *str);       // 轉大寫\

int main() {\
    char s[16] = "AfeE0f";\
    Upstr(s);\
    StringAdd1(s);\
    printf("%s\\n", s);\
    getchar();\
    return 0;\
}\

void StringAdd1(char *str) {\
    int len = strlen(str);\
    while (len--) {\
        if (str[len] == 'F') {\
            str[len] = '0';\
        } else {\
            str[len] += 1;\
            break;\
        }\
    }\
}\

void Upstr(char *str) {\
    for (int i = 0; i < strlen(str); ++i) {\
        str[i] = toupper(str[i]);\
    }\
}

關鍵點解析

  • strlen 在循環條件中重複調用,建議提前存入變量優化。
  • str[len] += 1 利用 ASCII 碼連續性:'0'-'9'、'A'-'F' 碼值連續,直接 +1 即可實現十六進制遞增('9'+1=':' 非十六進制字符,但輸入合法時不會觸發)。
  • 若最高位進位(如 "FFF" → "000"),當前實現會丟失進位位。工程版需檢測循環結束後 len < 0 並前插 '1'(需動態分配或預留空間)。
  • getchar() 暫停控制台,跨平台友好。

運行結果

AFEE10

擴展:支持任意長度與進位擴展的健壯版

#include \
#include \
#include \
#include \

bool hex_str_inc(char **str_ptr, size_t *capacity) {\
    char *str = *str_ptr;\
    size_t len = strlen(str);\
    \
    for (int i = len - 1; i >= 0; --i) {\
        if (str[i] == 'F') str[i] = '0';\
        else { str[i]++; return true; }\
    }\
    \
    // 全為 F,需擴容前插 '1'\
    if (*capacity <= len + 1) {\
        *capacity = (len + 2) * 2;\
        *str_ptr = realloc(*str_ptr, *capacity);\
        str = *str_ptr;\
    }\
    memmove(str + 1, str, len + 1);\
    str[0] = '1';\
    return true;\
}\

int main() {\
    char *s = strdup("FFF");\
    size_t cap = 16;\
    hex_str_inc(&s, &cap);\
    printf("%s\\n", s);  // 1000\
    free(s);\
}

此版本處理緩衝區擴容、動態內存管理,適合通用庫收錄。

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