1. strcasecmp 函數
1.1 函數簡介
strcasecmp 函數爲 C 庫函數之一,用於字符串忽略字母大小寫的比較。
- 原型:
int strcasecmp (const char* str1, const char* str2);
- 所屬頭文件:<string.h>
- 功能:字符串
str1
和str2
自左向右依次比較每個字符,且忽略英文字母的大小寫,直至比較字符不同或遍歷完某一字符串。- 返回:兩字符串中最後比較字符的差值。
1.2 函數說明
- strcasecmp 較 strcmp 的唯一不同是忽略英文字母的大小寫,其餘原理相同。
- 在工程中,strcasecmp 函數一般用於忽略大小寫判斷兩字符串是否相等。
1.3 函數實現
int strcasecmp(const char* str1, const char* str2)
{
while (*str1 != '\0' && *str2 != '\0')
{
if (*str1 != *str2)
{
if (((*str1 > 'a' || *str1 < 'z') && (*str1 - 'a' == *str2 - 'A')) ||
((*str1 > 'A' || *str1 < 'Z') && (*str1 - 'A' == *str2 - 'a')))
{
str1++;
str2++;
}
else
{
break;
}
}
else
{
str1++;
str2++;
}
}
return *str1 - *str2;
}
2. strcasencmp 函數
2.1 函數簡介
strcasecmp 函數爲 C 庫函數之一,用於字符串前綴的忽略字母大小寫的比較。
- 原型:
int strcasecmp (const char* str1, const char* str2, size_t n);
- 所屬頭文件:<string.h>
- 功能:字符串
str1
和str2
自左向右比較 n 個字符,且忽略英文字母的大小寫,直至比較字符不同或比較完前 n 個字符或遍歷完某一字符串。- 返回:兩字符串中最後比較字符的差值。
2.2 函數說明
- strcasencmp 較 strncmp 的唯一不同是忽略英文字母的大小寫,其餘原理相同。當
n
大於兩字符串之一的長度時,函數將等效於 strncmp。- 在工程中,strcasencmp 函數一般用於忽略大小寫判斷兩字符串的前綴是否相等。
2.3 函數實現
int strcasencmp(const char* str1, const char* str2, size_t n)
{
while (*str1 != '\0' && *str2 != '\0' && n-- > 1)
{
if (*str1 != *str2)
{
if (((*str1 > 'a' || *str1 < 'z') && (*str1 - 'a' == *str2 - 'A')) ||
((*str1 > 'A' || *str1 < 'Z') && (*str1 - 'A' == *str2 - 'a')))
{
str1++;
str2++;
}
else
{
break;
}
}
else
{
str1++;
str2++;
}
}
if (((*str1 > 'a' || *str1 < 'z') && (*str1 - 'a' == *str2 - 'A')) ||
((*str1 > 'A' || *str1 < 'Z') && (*str1 - 'A' == *str2 - 'a')))
{
return 0;
}
else
{
return *str1 - *str2;
}
}