//*********************************************************
// string1 と string2 を比較し、文字列の順序関係が
// string1 == string2 であれば0を
// string1 > string2 であれば正を
// string1 < string2 であれば負を
// それぞれ返します。
// 関数 strcmpi() の返す順序関係と関数 strcmp() の返す順序関係とは一致しません。
// この関数は大文字と小文字を区別しません。
//*********************************************************
int
strcmpi
(
const char *string1,
const char *string2
)
{
// 最初の不一致文字を見つける。
const char *p, *q;
{for( p = string1, q = string2;
tolower((unsigned char)*p) == tolower((unsigned char)*q);
++p, ++q )
{
// 両文字列が終端に達した。
if ( '\0' == *p )
{
return 0;
}
}}
// 不一致文字間の大小関係を返す。
return (unsigned char *)tolower((unsigned char)*p) > (unsigned char *)tolower((unsigned char)*q)
? 1 : -1;
}//strcmpi
//*********************************************************
// string1 と string2 を最大で num 文字まで比較し、文字列の順序関係が
// string1 == string2 であれば0を
// string1 > string2 であれば正を
// string1 < string2 であれば負を
// それぞれ返します。
// 関数 strncmpi() の返す順序関係と関数 strncmp() の返す順序関係とは一致しません。
// この関数は大文字と小文字を区別しません。
//*********************************************************
int
strncmpi
(
const char *string1,
const char *string2,
size_t num
)
{
// 0 文字比較で不一致文字は見つからない。
if ( 0 == num )
{
return 0;
}
// 最初の不一致文字を見つける。
const char *p, *q;
{for( p = string1, q = string2;
tolower((unsigned char)*p) == tolower((unsigned char)*q);
++p, ++q )
{
// 文字列が終端に達したか、指定文字数の比較が終了した。
if ( ('\0' == *p) || (num-1 <= (size_t)(p - string1)) )
{
return 0;
}
}}
// 不一致文字間の大小関係を返す。
return (unsigned char *)tolower((unsigned char)*p) > (unsigned char *)tolower((unsigned char)*q)
? 1 : -1;
}//strncmpi
関連
・文字列末尾からの文字列検索
・大文字と小文字を区別しない文字検索
・大文字と小文字を区別しない文字列検索
|
|