这就是我现在拥有的(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 数组,看看哪个较小(没有任何库)。
最佳答案
您可以利用以 null 结尾的字符串将基本算法简化为:
- 当两个字符串的第
n
个字符相同时(从 0 开始递增n
): - 如果两个字符串的第
n
个字符都是'\0'
则字符串显然相同,否则: - 否则,将第
n
个字符作为无符号值进行比较,以确定比较结果。
关于C++ - 为学校构建我自己的 String 类,无法正确重载 < 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063388/