分类: C/C++
2010-07-30 15:30:40
zj@zj:~/C_parm/string/own_str/strncmp$ cat strncmp.c
/*
* STRCMP compares two strings and returns an integer to indicate
* whether the first is less than the second,the two are equal, or
* whether the first is greater than the second.Comparison is done
* byte by byte on an UNSIGNED basis, which is to say that Null (0)
* is less than any other character (1-255).
*
* 字符串比较函数,比较字符串source和dest。当源字符串大于目标字符串的时
* 候,返回1;当源字符串等于目标字符串的时候,返回0。当源字符串小于目标
* 字符串的时候,返回-1;
*The strncmp() function is similar, except it only compares the first
(at most) n characters of s1 and s2.
*/
#include<stdio.h>
#include<stdlib.h>
int my_strncmp(const char *source,const char *dest,int n);
int main()
{
char *str1= "hello,zj!";
char *str2 = "hello,ubuntuer!";
my_strncmp(str1,str2,6);
my_strncmp(str1,str2,8);
my_strncmp(str2,str1,6);
my_strncmp(str2,str1,8);
my_strncmp(str2,str2,10);
exit (EXIT_SUCCESS);
}
int my_strncmp(const char *source,const char *dest,int n)
{
int ret = 0 ;
int i = 0;
while((i<n)&&(!(ret=*(unsigned char *)(source+i)-*(unsigned char *)(dest+i)))&&*(dest+i)&&*(source+i))
i++;
if (ret < 0)
printf("%s first %d chars lower than %s\n",source,n,dest);
else if (ret > 0 )
printf("%s first %d chars larger than %s\n",source,n,dest);
else
printf("%s first %d chars equal to %s\n",source,n,dest);
}
zj@zj:~/C_parm/string/own_str/strncmp$ ./strncmp
hello,zj! first 6 chars equal to hello,ubuntuer!
hello,zj! first 8 chars larger than hello,ubuntuer!
hello,ubuntuer! first 6 chars equal to hello,zj!
hello,ubuntuer! first 8 chars lower than hello,zj!
hello,ubuntuer! first 10 chars equal to hello,ubuntuer!