[英]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數組,看看哪一個較小(沒有任何庫)。
您可以利用以空值結尾的字符串來簡化基本算法,以:
n
個字符相同(以0開頭的n
遞增): n
個字符均為'\\0'
則字符串顯然相同,否則: 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),則需要將l
和r
類型更改為unsigned char
但是更簡單的解決方案是:
return strcmp( str, rhs.str ) < 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.