C++文字列比較
文字列の比較は完全に文字列の長さの比較ではありません:1、まず文字ごとのASCII値の比較からある文字までのASCII値が一致しないか、あるいはそのうちの1つの文字列が文字列の末尾に達して{"abcd"と"ba"が比較され、"ba"が大きいため、"ba"の文字'b'は"abcd"の文字'a'のASCII値より大きい}2、文字列の最初のn文字が同じであれば文字列の長さを比較し、長い文字列が大きい{「abc」と「abcd」が比較され、「abcd」が大きい.最初の3文字のASCII値が等しいと文字列が等しいと判断できず、さらに文字列の長さ「abc」と「abc」を比較すると、2文字列が等しい}
#include // for memcmp
#include // for std::string
/**
* lval > rval 1
* lval == rval 0
* lval < rval -1
* lval rval ,
*/
int compareString(string lval,string rval)
{
// n ASCII , ASCII memcmp
int res = memcmp(lval.c_str(), rval.c_str(), std::min(lval.size(),rval.size()));
if (res != 0) // , ASCII
{
return res > 0 ? 1 : -1;
}
if (lval.size() == rval.size()) //
{
return 0;
}
return lval.size() > rval.size() ? 1 : -1; //
}