函数名: strnicmp
功 能: 比较字符串str1和str2的前n个字符串字典序的大小,但是不区分字母大小写。 返回值: 当str1<str2时,返回值<0 ; 当str1=str2时,返回值=0; 当str1>str2时,返回值>0。 比较是这样进行的,先比较2个字符串的第1个字符字典序的大小,如果能比较出大小,则马上返回了,如果不能区别大小,开始比较第2个,如果这时第1个字符串已经到尽头了,第2个字符串还有字符,这时算第2个字符串大小。例: char *str1="B"; char *str2="abcD"; int n=4; strnicmp(char *str1, char *str2, 4); 结果是str1大,因为B在a的后面。 char *str1="ABCD"; char *str2="abcD"; int n=4; strnicmp(char *str1, char *str2, 4); 结果一样大。 char *str1="abc"; char *str2="abcD"; int n=5; strnicmp(char *str1, char *str2, 5); 结果是str2大。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int strnicmp(const char *s1, const char *s2, int len)
{
unsigned char c1, c2;
if(!len)
return 0;
do{
c1 = *s1++;
c2 = *s2++;
if (!c1 || !c2)
break;
if (c1 == c2)
continue;
c1 = tolower(c1);
c2 = tolower(c2);
if (c1 != c2)
break;
}while(--len);
return (int)c1 - (int)c2;
}
int main(void)
{
const char str1[] = "ABC";
const char str2[] = "AbCD";
printf("strnicmp(str1, str2, strlen(str1)) = %d/n",
strnicmp(str1, str2, strlen(str1)));
return 0;
}
char *StrToLower(char * str)
{
assert(str!=NULL);
char *s=str;
while(*s!='\0')
{if(*s<='Z'&&*s>='A')
*s=*s+32;//*s=*s+'a'-'A';
s++;
}
return str;
}
char *StrToUpper(char * str)
{
assert(str!=NULL);
char *s=str;
while(*s!='\0')
{if(*s<='z'&&*s>='a')
*s=*s-32;//*s=*s-('a'-'A');
s++;
}
return str;
}
void* memcpy(void* pvTo, const void* pvForm, size_t size)
{
assert((pvTo!= NULL) && (pvFrom!= NULL));//使用断言防止传递空地址
unsigned char* pbTo = (unsigned char*)pvTo;//防止改变pvTo的地址
unsigned char* pbFrom = (unsigned char*)pvFrom;//防止改变pvFrom的地址
while(size-- > 0)
{
*pbTo++ = *pbFrom++;
}
return pvTo;
}
-------------------------------------------------------------------------------------------------------
char* strcpy(char* pDest, const char* pSrc)
{
assert((pDest != NULL) && (pSrc != NULL));
char *pTmp = pDest;
while ((*pDest++ = *pSrc++) != '\0');
return pTmp;
}
--------------------------------------------------------------------------------------------------------
函数原型:int strcmp(const char *dest, const char *source) ;
返回值:返回整数值,如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。字符大小是按照字符的字典序列进行排列的。
参数说明:都是以''/0''为结束符的字符串
实现;
- int strcmp(const char *dest, const char *source)
- {
- assert((NULL != dest) && (NULL != source));
- while (*dest && *source && (*dest == *source))
- {
- dest ++;
- source ++;
- }
- return *dest - *source;
- /*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest < source ,则返回值小于0。*/
- }