//Program to implement strcmp #includeint 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; }
Thursday, 31 January 2013
STRCMP implementation in C
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.
Subscribe to:
Comments (Atom)