P161. To reverse string words.

 #include<stdio.h>

int my_strlen(const char *);

int my_strcmp(const char *,const char *);

const char * my_strchr(const char *,char);

void my_strcpy(const char *,char *);

void my_strcat(const char *,char *);

void my_strrev2(char *,int);

void my_strrev1(char *,char *);

void my_strrev(char *);

void my_strupr(char *);

 

 

void main()

{

        char c[30],*cp,*s;

        printf("Enter the string : ");

        scanf("%[^\n]",c);

        s=c;

        while(cp=my_strchr(s,' '))

        {

                my_strrev1(s,cp-1);

                s=cp+1;

        }

        my_strrev(s);

        printf("%s",c);

 

}

 

 

 

int my_strcmp(const char *p,const char *q)

{

    while(*p)

    {

        if(*p==*q)

        {

            p++,q++;

        }

        else

        return *p-*q;

    }

}

 

void my_strcat(const char *p,char *q)

{

    while(*q)

    q++;

 

    while(*p)

    {

        *q=*p;

         q++;

         p++;

    }

}

 

 

void my_strrev2(char *p,int i)

{

    char *q=p+i-1;

    while(p<q)

    {

        *p=*p^*q;

        *q=*p^*q;

        *p=*p^*q;

        p++;

        q--;

    }

}

 

 

void my_strrev1(char *p,char *q)

{

    while(p<q)

    {

        *p=*p^*q;

        *q=*p^*q;

        *p=*p^*q;

        p++;

        q--;

    }

}

 

 

void my_strrev(char *p)

{

    // using index

    /*

    int i,j,len;

    for(len=0;p[len];len++);

    for(i=0,j=len-1;i<j;i++,j--)

    {

        p[i]=p[i]^p[j];

        p[j]=p[i]^p[j];

        p[i]=p[i]^p[j];

    }

    */

 

    //using pointer

    char *q;

    q=p;

    while(*q)

        q++;

    q--;

 

    while(p<q)

    {

        *p=*p^*q;

        *q=*p^*q;

        *p=*p^*q;

        p++;

        q--;

    }

}

 

 

void my_strcpy(const char *p,char *q)

{

    // using index

    /*

    int i;

    for(i=0;p[i];i++)

    {

        q[i]=p[i];

    }

    */

 

    // using pointers

    while(*p)

    {

        *q++=*p++;

    }

}

 

 

int my_strlen(const char *p)

{

    int i;

    for(i=0;p[i];i++);

    return i;

}

 

void my_strupr(char *p)

{

    int i;

    for(i=0;p[i];i++)

            if(p[i]>='a' && p[i]<='z')

                     p[i]=p[i]-32;

}

 

const char *my_strchr(const char *p,char ch)

{

    int i;

    for(i=0;p[i];i++)

        if(p[i]==ch)

             return p+i;

    return 0;

}

Comments