キャー! | spin on the RITZ

キャー!

「今アナタ置換しましたよね!」
「えっ、いや、その、しましたけど・・・・・」

//-------------------------------------------------
// 基本情報技術者試験 平成17年春期試験 午後問2
//
// 文字列置換の擬似アルゴリズム
//-------------------------------------------------
#include <stdio.h>

///////////////////////////////////////////////////
// Replace
//
// A - 対象文字列
// S - 照合文字列
// D - 置換文字列
// B - 結果文字列
///////////////////////////////////////////////////
void Replace(char *A, char *S, char *D, char *B)
{
    int Aidx, Sidx, Didx, Bidx, Idx;

    Aidx = Bidx = 0;
    while (A[Aidx] != '\0') {
        if (A[Aidx] == S[0]) {
            Idx = Aidx;
            Sidx = 0;
            do {
                Sidx++;
                Aidx++;
            } while (A[Aidx] == S[Sidx] && A[Aidx] != '\0');
            if (S[Sidx] == '\0') {
                Didx = 0;
                while (D[Didx] != '\0')
                    B[Bidx++] = D[Didx++];
            } else {
                B[Bidx++] = S[0];
                Aidx++;
            }
        } else {
            B[Bidx] = A[Aidx];
            Aidx++;
            Bidx++;
        }
    }
    B[Bidx] = '\0';
}

int main(void)
{
    char A[] = "abcdefghijklmn";
    char S[] = "cde";
    char D[] = "CDE!";
    char B[30];

    Replace(A, S, D, B);

    printf("%s\n", B);

    return 0;
}

対象文字列のみで結果文字列の分も機能させようとすると、結構ややこしくなります。ずらしたりする必要がありますからね。
気が向いたらやる。