【C語言庫函數原始碼】
【本程式在Dev C++ 4.9.9.2 下編譯通過】
/*
memicmp perform a case-insensitive memory comparision.
For differences,upper case letters are mapped to lower case.Thus, "abc_" < "ABCD" since "_" < "d".
(與memcmp區別就是在比較的時候不區分大小寫)比較記憶體地區buffer1和buffer2的前count個位元組。
當buffer1 < buffer2時,傳回值 < 0;當buffer1 = buffer2時,傳回值 0;
當buffer1 > buffer2時,傳回值 > 0。
*/
int my_tolower(char ch)
{
if(ch >= 'A' && ch <= 'Z')
return (ch + 0x20);
return ch;
}
int my_memicmp(const void *buffer1,const void *buffer2,int count)
{
int f = 0;
int l = 0;
while (count--)
{
if ( (*(unsigned char *)buffer1 == *(unsigned char *)buffer2) ||
((f = my_tolower( *(unsigned char *)buffer1 )) ==
(l = my_tolower( *(unsigned char *)buffer2 ))) )
{
buffer1 = (char *)buffer1 + 1;
buffer2 = (char *)buffer2 + 1;
}
else
break;
}
return ( f - l );
}
void Print(char * str1,char *str2,int t)
{
if(t > 0)
printf("/n%s Upper Than %s/n",str1,str2);
else if(t < 0)
printf("/n%s Lower Than %s/n",str1,str2);
else
printf("/n%s Equal %s/n",str1,str2);
}
int main()
{
char *str1= "ammana";
char *str2 = "babi";
char *str3 = "AMMANA";
char *str4 = "bab_";
Print(str1,str2,my_memicmp(str1,str2,4));
Print(str3,str1,my_memicmp(str3,str1,4));
Print(str4,str2,my_memicmp(str4,str2,4));
system("pause");
return 0;
}