Saturday, 9 January 2016

Replace a Text By Another Text in String (Algorithm 3.2)


Before seeing the solution make sure that you tried enough. Don’t paste the whole code, just find out the logic. If you stuck in trouble, just inform me on comment.

/**Bismillahir Rahmanir Rahim.**/

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

int l_T, l_P, l_Q, x, y, move, k;

int Index(char t[], char p[])
{
    int k=-1, r, s, max, l, m, cnt, i;
    s = strlen(t);
    r = strlen(p);
    max = s-r+1;
    for(i=0; i<max; i++)
    {
        if(t[i]==p[0])
        {
            for(l=1, cnt=1, m=i+1; l<r; l++, m++)
            {
                if(p[l]==t[m]) cnt++;
                else break;
            }
            if(cnt==r)
            {
                k = i;
                break;
            }
        }
    }
    return k;
}

char *REPLACE_1(char t[], char p[], char q[], int k)
{
    l_T = strlen(t);
    l_P = strlen(p);
    l_Q = strlen(q);
    move = l_Q-l_P;
    for(x=l_T-1; x>=k; x--)
        t[x+move] = t[x];
    t[l_T+move] = '\0';
    for(x=k, y=0; y<l_Q; x++,y++)
        t[x] = q[y];
    return t;

}
char *REPLACE_2(char t[], char p[], char q[], int k)
{
    l_T = strlen(t);
    l_P = strlen(p);
    l_Q = strlen(q);
    move = l_P-l_Q;
    for(x=k+move; x<l_T; x++)
        t[x-move] = t[x];
    t[l_T-move] = '\0';
    for(x=k, y=0; y<l_Q; x++,y++)
        t[x] = q[y];
    return t;

}

int main()
{
    char *T=malloc(sizeof(char)*5000);
    char  P[1000], Q[1000];
    printf("Please, Input Text.\n");
    gets(T);
    printf("Please, Input What You Want To Remove.\n");
    l_P = strlen(gets(P));
    printf("Please, Input What You Want To Replace on Remove.\n");
    l_Q = strlen(gets(Q));
    for(k=Index(T,P); k!=-1; )
    {
        if(l_P<l_Q) T = REPLACE_1(T,P,Q,k);
        else T = REPLACE_2(T,P,Q,k);
        k=Index(T,P);
    }
    printf("%s\n", T);
    free(T);
    return 0;
}


0 comments:

Post a Comment

Note: only a member of this blog may post a comment.