String replacement

 avatar
unknown
c_cpp
2 years ago
1.3 kB
5
Indexable
#include <bits/stdc++.h>
using namespace std;


int PMalgorithm(char *T, char *P)
{
    int S = strlen(T);
    int R = strlen(P);
    int k=1, Max = S-R+1;
    while(k<=Max) {
        for(int L=0; L<R; L++) {
            if(P[L]!=T[L+k-1])
                goto label;
        }
        return k-1;
    label:
        k++;
    }
    return -1;
}

char* Replace(char *T, char *P, char *R)
{
    int t=strlen(T);
    int p=strlen(P);
    int r=strlen(R);

    int p_index = PMalgorithm(T, P);
    int i=p_index;
    if(p>r) {
        int k=0, d=p-r;
        while(R[k]!='\0')
            T[i++]=R[k++];
        while(T[i]!='\0') {
            T[i]=T[i+d];
            i++;
        }
        T[i]='\0';
    } else if(r>p) {
        int e = r-p, i=t-1;
        while(i>=p_index) {
            T[i+e] = T[i];
            i--;
        }
        T[t+e]='\0';
        int k=0;
        while(R[k]!='\0')
            T[p_index++] = R[k++];
    } else {
        int k=0;
        while(R[k]!='\0') {
            T[i++]=R[k++];
        }
    }
    return T;
}



int main()
{
    char T[50] = "abababbbaabababa";
    char P[] = "aaba";
    char R[] = "jjkjhkjhjhgj";
    strcpy(T, Replace(T, P, R));
    cout << T << endl;
}
Editor is loading...