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; //           
}