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

C語言字符串替換實現:支援不同長度的子字符串替換

     編輯:關於C語言

字符串替換核心邏輯

在C語言中實現字符串替換時,若待替換子字符串與替換字符串長度不同,需處理內存移動與擴容問題。本文提供一個完整的 StrReplace 函數,能處理三種情況:長度相等、替換串較長、替換串較短。

演算法思路

  1. 遍歷原字符串,尋找匹配 strFind 的起始位置。
  2. 若找到匹配,根據長度關係調整後續字符位置:
    • 等長:直接原地覆蓋。
    • 替換串較長:向後移動數據騰出空間,更新總長度,再填入新串。
    • 替換串較短:向前覆蓋數據,縮減總長度,再填入新串。
  3. 調整索引繼續掃描,避免重複替換或遺漏。

完整代碼示例

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

void StrReplace(char* strSrc, char* strFind, char* strReplace) {
    int i, j, k, m;
    int lengthSrc = strlen(strSrc);
    int lengthFind = strlen(strFind);
    int lengthReplace = strlen(strReplace);

    for (i = 0; i < lengthSrc; ) {
        j = 0;
        if (strSrc[i] == strFind[j]) {
            do { i++; j++; }
            while (j < lengthFind && strSrc[i] == strFind[j]);

            if (j == lengthFind) { // 找到匹配
                if (lengthFind == lengthReplace) { // 等長
                    for (k = i - lengthFind, m = 0; m < lengthReplace; k++, m++)
                        strSrc[k] = strReplace[m];
                }
                else if (lengthFind < lengthReplace) { // 需擴容
                    for (k = lengthSrc; k >= i; k--)
                        strSrc[k + lengthReplace - lengthFind] = strSrc[k];
                    lengthSrc += lengthReplace - lengthFind;
                    for (k = i - lengthFind, m = 0; m < lengthReplace; k++, m++)
                        strSrc[k] = strReplace[m];
                    i += lengthFind - lengthReplace; // 修正索引
                }
                else { // lengthFind > lengthReplace,需縮減
                    for (k = i; k <= lengthSrc; k++)
                        strSrc[k - (lengthFind - lengthReplace)] = strSrc[k];
                    lengthSrc -= lengthFind - lengthReplace;
                    for (k = i - lengthFind, m = 0; m < lengthReplace; k++, m++)
                        strSrc[k] = strReplace[m];
                    i -= lengthFind - lengthReplace;
                }
            }
        }
        else { i++; }
    }
}

int main() {
    char strSrc[255], strFind[255], strReplace[255];
    gets(strSrc); gets(strFind); gets(strReplace);
    StrReplace(strSrc, strFind, strReplace);
    puts(strSrc);
    return 0;
}

補充:Word/記事本一次替換多個相關字符串

若需同時將“我的”、“他的”替換為“她的”,可在「尋找和替換」對話框中勾選「使用萬用字元」,查找內容輸入 ?的,替換為 她的,點擊「全部替換」即可。

指定位置替換子字符串(長度可變)

另一種常見需求是從第 m 個字符開始替換 n 個字符。以下代碼演示動態分配臨時緩衝區完成該操作:

#include <stdio.h>
char* exchange(char* first, char* second, int index, int count) {
    char *temp = new char[100];
    for (int i = 0; i <= index && first[i] != '\0'; i++)
        temp[i] = first[i];
    int j = 0;
    for (; second[j] != '\0'; j++)
        temp[index + j] = second[j];
    for (int m = 0; first[m] != '\0'; m++)
        temp[index + j + m] = first[index + count + m];
    return temp;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved