String Comparison in C
In strings strcmp() function is used to compare two strings under a common header file called string.h .This function returns a negative,zero or a positive integer depending on the string pointed to,by str1 to string pointed to by str2.
Syntax – strcmp()
int strcmp(const char *str1,const char *str2);
Arguments
- str1 is first array to compare.
- str2 is the second array to compare.
Return values
- If str1=str2 function returns 0.
- If str1<str2 function returns a negative integer.
- If str1>str2 function returns a positive integer.
- If string doen’t exists in str2 then it returns NULL.
How return value of strcmp() is calculated ?
strcmp() function cannot compare strings by length. It compares strings by its ASCII values. If s1=”apple” and s2=”banana”, when we compare both the strings like strcmp(s1,s2), then this function returns a negative integer because ASCII value of ‘a’ is less than the ASCII value of ‘b’. If both the first characters are same then it goes for second characters.
Examples
Example – Compare Strings using strcmp() function
If two strings are equal, strcmp(s1, s2) should return zero.
C Program
#include <stdio.h>
#include <string.h>
int main()
{
char s1[]="apple";
char s2[]="banana";
if(strcmp(s1,s2)==0)
printf("equal");
if (strcmp(s1,s2)<0)
printf("s1 less than s2");
if(strcmp(s1,s2)>0 )
printf("s1 greater than s2");
return 0;
}
Output
s1 less than s2
Example – Compare Strings using Recursion
In string comparison using recursion we are using three conditions. If one of the pointer is NULL pointer then it returns -2 in order to stop the process. If two strings are identical it returns 0 after comparing every character in one string with another string. We recursively call CompareStrings() function in order to compare both the strings.
C Program
#include <string.h>
#include <stdio.h>
int main() {
char str[100],s[100];
printf("enter strings to compare");
gets(str);
gets(s);
printf("the result of comparison is %d\n",CompareStrings(s, str));
return 0;
}
int CompareStrings(char *s, char *s1) {
// if one of the pointer is a NULL pointer return directly -2
// in order to stop the process
if(s==NULL || s1==NULL)
return -2
if(strcmp(s,s1)==0) // the two strings are identical
return 0;
if((s[0])==(s1[0]) && (s[0])==((s1+1)[0]))
CompareStrings(s, ++s1);
else if((s[0])==(s1[0]) && (s1[0])==((s+1)[0]))
CompareStrings(++s, s1);
else if((s[0])==(s1[0]))
CompareStrings(++s, ++s1);
else
return -1;
}
Example – Compare Strings using Pointers
In this example, we will use string pointers and write a function to compare the two strings.
C Program
#include<stdio.h>
int compstring(char* s1, char* s2);
int main() {
char s1[100], s2[100];
int result;
printf("Input a string1\n");
gets(s1);
printf("Input a string2\n");
gets(s2);
result = compstring(s1,s2);
if (result == 0)
printf("The strings are same.\n");
else
printf("The strings are different.\n");
return 0;
}
int compstring(char *s1, char *s2) {
while (*s1== *s2) {
if (*s1 == '\0' || *s2 == '\0')
break;
s1++;
s2++;
}
if (*s1 == '\0' && *s2== '\0')
return 0;
else
return -1;
}
Conclusion
In this C Tutorial – Compare Strings, we have gone through the syntax of strcmp() inbuilt function and two other ways using recursion and pointers respectively with Example C Programs.