次の例のように、2 つの文字を比較する必要があります。
COMPARE('a','z') Will return -1
COMPARE('a','A') Will return -1
COMPARE('g','g') WIll return 0
COMPARE('A','a') Will return 1
一般に、 Function:strcmp()
と同じようにそれらを比較する必要がありますが、比較にはビットごとの演算子を使用する必要があります。これが私が今やったことです。
int Lcmp(char unsigned first,char unsigned sec)
{
int i;
char unsigned mask=0x80; //mask = 10000000 in binary
for(i=0;i<7;i++)
{
if(first&mask&&(!(sec&mask))) //first>sec, Beacuase first had the sum 2^7
{
return 1;
}
else if((!(first&mask))&&(sec&mask)) //first<sec " " " "
{
return -1;
}
mask>>=1; //move the comparsion bit rigth
}
return 0; //CASE: first==sec
}
私の問題は; このコードは機能しません。そして、私が意味するのはうまくいかないということです.パターンなしで常にFALSEの結果が得られます. 修理してください、ありがとう。注:辞書で比較する関数が必要です
編集:
I added this statment after the mask decleretion.
if(first<'a'&&sec>='a')
first^=mask;
else if(first>='a'&&sec<'a')
sec^=mask;
私がしたことは、それらの1つが大文字である場合にMSBを削除し、小文字にアドベテジを与えることです。