Thursday, 31 January 2013

STRCMP implementation in C

//Program to implement strcmp

#include
int my_strcmp( const char *sDest, const char *sSrc){
    while( *sDest == *sSrc){
        if( *sDest == '\0')
            return 0;
        sDest++;
        sSrc++;
    }
    return (*sDest - *sSrc);
}
// OR
int mystrcmp(const char *str1, const char *str2){
    while((*str1 == *str2) && *str1 && *str2) str1++, str2++;
    return (*str1 - *str2);
}
//OR using array
int mystrcmp(const char *a, const char *b)
    int i;
    for(i=0; (a[i] == b[i]) && (a[i] != '\0') && (b[i] != '\0'));i++);
    return (a[i] - b[i])
}

int main(){
    printf("\nstrcmp() = [%d]\n", mystrcmp("Umesh","Umesh"));
    printf("\nstrcmp() = [%d]\n", mystrcmp("Umesh","Guddu"));
      return(0);
}

ONE LINE IMPLEMENTATION USING RECURSION

#include <stdio.h>

//My_strcmp return 0 if both the string are same , 1 if they are diff

int my_strcmp(char *a, char *b){
    return (*a==*b && *b=='\0')?0:(*a == *b)?my_strcmp(++a, ++b):1;
} 

int main(){
    char *a = "Umesh";
    char *b = "Umesh";
    if(my_strcmp(a, b) == 0){
        printf("Same");
    else
        printf("Not same");
    return 0;
}  

STRLEN implementation in C

Two methods mentioned below
Method 1:
//Program to implement strlen
#include <stdio.h>
int my_strlen(const char *src){     int count = 0;     while(src[count] != '\0')         count++;     return count; }
int main(){     char src[] = "umesh";     printf("length of src = %d\n", my_strlen(src));     return 0; }
Method 2:
#include <stdio.h>
int my_strlen(const char *src){     const char *ptr;     for(ptr = src; *src; src++);     return (src - ptr); // Address is subtracted. }
int main(){     char src[] = "umesh";     printf("length of src = %d\n", my_strlen(src));     return 0; }

STRCPY implementation in C

I have mentioned two methods below.
Method 1:
// Program to implement strcpy
#include <stdio.h>
char *my_strcpy(char *dest, const char *src){     char *ptr;     ptr = dest;     while( *dest++ = *src++);     return ptr; }
int main(){     char dest[6];     char src[6] = "umesh"; // 5 characters + '\0'     my_strcpy(dest, src);     printf("dest = %s\n", dest);     return 0; }
* const char *src - const is used to restrict any change in the src
Method 2:
#include <stdio.h>
char *my_strcpy(char dest[], const char src[]){     int i = 0; // loop variable     while(src[i] != '\0'){         dest[i] = src[i];         i++;     }     dest[i]='\0';     return dest; }
int main(){     char dest[6];     char src[6] = "umesh"; // 5 characters + '\0'     my_strcpy(dest, src);     printf("dest = %s\n", dest);     return 0; }

ATOI implementation in C

// Program to implement own atoi function
#include <stdio.h>
int my_atoi(char *p) {     int k = 0;     while (*p) {         k = (k<<3)+(k<<1)+(*p)-'0';         p++; // Don't increment k     }     return k; }
int main(){     char pStr[] = "987";     int myNum = my_atoi(pStr);     printf(" myNum = %d\n", myNum);     return 0; }
Explanation: 1. k = (k<<3) + (k<<1) + (*p) - '0';  is equivalent to  k = k*10 + (*p) - '0'; 2. During first loop value of k is 0 and (*p) has value of char '9' ( ascii  - 57) and ascii of char '0' is 48. 3. Subtraction of them gives the integer value 9 ,stored in k. 4. Increment the pointer p, makes it points to char '8'. 5. Integer k is multiplied with 10  ( k<<3 + k<<1) and 8 is added to it making its value 98. 6. Again p is incremented and k finally stores integer 987.