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

C 語言字符串編碼轉換:打亂重組替換實現簡易加密/解碼邏輯

     編輯:程式設計疑難解答

題目需求推測

根據最佳回答,第四問要求:將字符串打亂(如打亂順序),轉為字符數組,遍歷數組元素,滿足特定編碼規則的字符進行替換,最後將數組拼接還原為字符串。

核心步驟實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// 簡單編碼規則示例:字母後移 1 位(a→b, z→a),數字+1(9→0)
char encodeChar(char c) {
    if (c >= 'a' && c <= 'z') return (c == 'z') ? 'a' : c + 1;
    if (c >= 'A' && c <= 'Z') return (c == 'Z') ? 'A' : c + 1;
    if (c >= '0' && c <= '9') return (c == '9') ? '0' : c + 1;
    return c;
}

// 打亂數組(Fisher-Yates 洗牌)
void shuffle(char *arr, int n) {
    for (int i = n - 1; i > 0; i--) {
        int j = rand() % (i + 1);
        char tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
    }
}

int main() {
    srand((unsigned)time(NULL));
    char str[] = "HelloWorld123";
    int len = strlen(str);
    char *arr = malloc(len + 1);
    strcpy(arr, str);

    // 1. 打亂
    shuffle(arr, len);
    printf("打亂後: %s\n", arr);

    // 2. 遍歷替換
    for (int i = 0; i < len; i++) {
        arr[i] = encodeChar(arr[i]);
    }
    printf("編碼後: %s\n", arr);

    // 3. 還原順序(若知道打亂種子可逆向,否則不可逆)
    // 此處僅演示邏輯,實際加密需保存打亂索引或使用可逆算法
    free(arr);
    return 0;
}

關鍵點提示

  • 打亂需可逆:若需解碼,必須記錄打亂時的索引映射或使用確定性種子。
  • 編碼規則自定義:題目未給具體規則,可設計凱撒密碼、異或、Base64 等。
  • 內存管理:動態分配數組用完需 free。

進階:原地打亂+編碼一體化

// 結合打亂與編碼,避免額外數組
for (int i = len - 1; i > 0; i--) {
    int j = rand() % (i + 1);
    // 交換時同步編碼
    char tmp = encodeChar(arr[i]);
    arr[i] = encodeChar(arr[j]);
    arr[j] = tmp;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved