【造輪子】實現 strcasecmp、strcasencmp 函數

1. strcasecmp 函數

1.1 函數簡介

strcasecmp 函數爲 C 庫函數之一,用於字符串忽略字母大小寫的比較。

  • 原型:int strcasecmp (const char* str1, const char* str2);
  • 所屬頭文件:<string.h>
  • 功能:字符串 str1str2 自左向右依次比較每個字符,且忽略英文字母的大小寫,直至比較字符不同或遍歷完某一字符串。
  • 返回:兩字符串中最後比較字符的差值。

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>
  • 功能:字符串 str1str2 自左向右比較 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;
	}
}

更多造輪子系列博文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章