簡體   English   中英

C ++-為學校建立我自己的String類,無法正確重載<運算符

[英]C++ - Building my own String class for school, can't overload < operator correctly

這就是我現在所擁有的(str是一個動態的,以null結尾的char數組):

bool String::operator<(const String& rhs) const {
    if (str == rhs.str)
        return false;
    int i = 0;
    while (str[i] != '\0' && rhs[i] != '\0') {
        if (str[i] > rhs[i])
            return false;
        ++i;
    }
    return true;
}

這可以通過大多數測試,但是在以下方面失敗:

String s1("abc");
String s2("abcde");

assert(!(s2 < s1));

無論我如何更改功能,它似乎總是無法通過一項測試。 您將如何重載此運算符? 基本上,我只需要比較兩個以null結尾的char數組,看看哪一個較小(沒有任何庫)。

您可以利用以空值結尾的字符串來簡化基本算法,以:

  1. 雖然兩個字符串的第n個字符相同(以0開頭的n遞增):
  2. 如果兩個字符串的第n個字符均為'\\0'則字符串顯然相同,否則:
  3. 否則,將第n個字符作為無符號值進行比較,以確定比較結果。

如果將循環更改為:

int i = 0;
while (true) {
    char l = str[i];
    char r = rhs.str[i++];
    if( l < r ) return true;
    if( l == 0 || l > r ) return false;
}

它應該工作。 請注意,如果您需要正確處理國家字母(通常值> 127),則需要將lr類型更改為unsigned char

但是更簡單的解決方案是:

return strcmp( str, rhs.str ) < 0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM