字符串比较函数-strcasecmp()和strncasecmp()

函数说明 strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。

返回值    若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0的值.

首先给出这两个函数的具体实现:

47 /*****************************************************************************/
 48 /* STRCASECMP() - Case-insensitive strcmp.                                   */
 49 /*****************************************************************************/
 50 static int strcasecmp(const char* s1, const char* s2)
 51 {
 52    char c1, c2;
 53    do { c1 = *s1++; c2 = *s2++; }
 54    while (c1 && c2 && (tolower(c1) == tolower(c2)));
 55 
 56    return tolower(c1) - tolower(c2);
 57 }
 58 
 59 /*****************************************************************************/
 60 /* STRNCASECMP() - Case-insensitive strncmp.                                 */
 61 /*****************************************************************************/
 62 static int strncasecmp(const char* s1, const char* s2, size_t n)
 63 {
 64    char c1, c2;
 65 
 66    if (!n) return 0;
 67 
 68    do { c1 = *s1++; c2 = *s2++; }
 69    while (--n && c1 && c2 && (tolower(c1) == tolower(c2)));
 70 
 71    return tolower(c1) - tolower(c2);
 72 }
#include <stdio.h>  
#include <string.h>  
#include <ctype.h>  
int strcasecmp(const char *s1, const char *s2)  
{  
    int c1, c2;  
    do {  
        c1 = tolower(*s1++);  
        c2 = tolower(*s2++);  
    } while(c1 == c2 && c1 != 0);  
    return c1 - c2;  
}  
int main(void)  
{  
    int n = 4;  
    char str1[] = "Acef";  
    char str2[] = "ACEFd";  
    printf("strcasecmp(str1, str2) = %d/n", strcasecmp(str1, str2));  
    return 0;  
}  

函数说明:strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异

返回值   :若参数s1和s2字符串相同则返回0 s1若大于s2则返回大于0的值 s1若小于s2则返回小于0的值

#include <stdio.h>  
#include <string.h>  
#include <ctype.h>  
  
int mystrncasecmp(const char *s1, const char *s2, int n)  
{  
    int c1, c2;  
    do {  
        c1 = tolower(*s1++);  
        c2 = tolower(*s2++);  
    } while((--n > 0) && c1 == c2 && c1 != 0);  
    return c1 - c2;  
}  
int main(void)  
{  
    int n = 4;  
    char str3[] = "ABCf";  
    char str4[] = "abcd";  
    printf("mystrncasecmp(str3, str4, n) = %d/n", mystrncasecmp(str3, str4, n));  
    return 0;  
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值