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.
ADVERTISEMENT

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 TutorialCompare Strings, we have gone through the syntax of strcmp() inbuilt function and two other ways using recursion and pointers respectively with Example C Programs.