【C语言】模拟实现strcmp()、strncmp()函数

//strcmp

函数原型:int strcmp const *string1,const char *string2;


参数说明:string1为第一个要比较的字符串,string2为第二个要比较的字符串

  
函数功能:比较字符串str1str2大小
  
返回说明:返回整数值:当str1时,返回值<0; 

                      当str1=str2时,返回值=0

                      str1>str2时,返回值>0


#pragma warning (disable:4996)
#include
#include
#include
//#include

int my_strcmp(const char *str1, const char *str2)   //区分字符大小写
{
     assert(str1);
	assert(str2);

	while (*str1&&*str2&&(*str1==*str2))
	{
			str1++;
			str2++;
	}
	return *str1 - *str2;
}

int my__stricmp(char *str1,char *str2)    //不区分字符大小写
{
    assert(str1);
	assert(str2);

	while (*str1&&*str2 )
	{
		if (*str1>= 'A'&&*str1 <= 'Z')
			*str1= *str1 + 'a' - 'A';
		if (*str2 >= 'A'&&*str2 <= 'Z')
			*str2 = *str2 + 'a' - 'A';
		if (*str1 != *str2)
		{
			break;
		}
			str1++;
			str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char string1[] = "The quick brown dog jumps over the lazy fox";
	char string2[] = "The QUICK brown dog jumps over the lazy fox";

	char tmp[20];
	int result;

	/* 区分字符大小写 */
	printf("Compare strings:\n\t%s\n\t%s\n\n", string1, string2);
	result = my_strcmp(string1, string2);
	if (result > 0)
		strcpy(tmp, ">");
	else if (result < 0)
		strcpy(tmp, "<");
	else
		strcpy(tmp, "==");
	printf("\tstrcmp:   String 1  %s string 2\n", tmp);

	/* 不区分字符大小写( my_stricmp) */
	result = my__stricmp(string1, string2);
	if (result > 0)
		strcpy(tmp, ">");
	else if (result < 0)
		strcpy(tmp, "<");
	else
		strcpy(tmp, "==");
	printf("\t_stricmp:  String 1  %s string 2\n", tmp);


	system("pause");
	return 0;
}
                  

//strncmp

函数原型:int strncmp (const char *string1,const char *string2,size_count)

参数说明:string1为第一个要比较的字符串,string2为第二个要比较的字符串,count为指定的str1str2的比较的字符数。
  
函数功能:比较字符串str1str2的前n个字符。
  
返回说明:返回整数值:当str1时,返回值<0; 

                      当str1=str2时,返回值=0; 

                      str1>str2时,返回值>0

#pragma warning (disable:4996)
#include
#include
#include

int my_strncmp(const char *str1, const char *str2, size_t count)
{
	assert(str1);
	assert(str2);

	while (*str1&&*str2&&(*str1 == *str2)&&count--)
	{
		str1++;
		str2++;
	}

	return *str1 - *str2;
}

int my__strnicmp(char *str1, char *str2, size_t count)
{
	assert(str1);
	assert(str2);

	while (*str1&&*str2&&count--)
	{
		if (*str1 >= 'A'&&*str1 <= 'Z')
			*str1 = *str1 + 'a' - 'A';
		if (*str2 >= 'A'&&*str2 <= 'Z')
			*str2 = *str2 + 'a' - 'A';
		if (*str1 != *str2)
			break;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char string1[] = "The quick brown dog jumps over the lazy fox";
	char string2[] = "The QUICK brown fox jumps over the lazy dog";
	char tmp[20];
	int result;
	printf("Compare strings:\n\t\t%s\n\t\t%s\n\n", string1, string2);
	printf("strncmp is case sensitive\n");
	result = my_strncmp(string1, string2, 10);    //区分字符大小写
	if (result > 0)
		strcpy(tmp, ">");
	else if (result < 0)
		strcpy(tmp, "<");
	else
	strcpy(tmp, "==");
	printf("Result:\t\tString 1 %s string 2\n\n", tmp);

	printf("_strnicmp is case-insensitive\n");     //不区分字符的大小写
	result = my__strnicmp(string1, string2, 10);    
	if (result > 0)
		strcpy(tmp, ">");
	else if (result < 0)
		strcpy(tmp, "<");
	else
	strcpy(tmp, "==");
	printf("Result:\t\tString 1 %s string 2\n\n", tmp);

	system("pause");
	return 0;
}


你可能感兴趣的:(c语言)