strcmp, strcpy, memcpy, strnicmp 实现

函数名: 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''为结束符的字符串

实现;

 

  1. int strcmp(const char *dest, const char *source)  
  2. {  
  3.    assert((NULL != dest) && (NULL != source));  
  4.    while (*dest && *source && (*dest == *source))  
  5.    {  
  6.          dest ++;  
  7.          source ++;  
  8.    }  
  9.    return *dest - *source;  
  10. /*如果dest > source,则返回值大于0,如果dest = source,则返回值等于0,如果dest  < source ,则返回值小于0。*/  
  11. }  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值