C++ - 为学校构建我自己的 String 类,无法正确重载 < 运算符

标签 c++ arrays string operator-overloading

这就是我现在拥有的(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 结尾的字符串将基本算法简化为:

  1. 当两个字符串的第 n 个字符相同时(从 0 开始递增 n):
  2. 如果两个字符串的第n个字符都是'\0'则字符串显然相同,否则:
  3. 否则,将第n个字符作为无符号值进行比较,以确定比较结果。

关于C++ - 为学校构建我自己的 String 类,无法正确重载 < 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063388/

相关文章:

javascript - 动态添加元素到数组

python - 子字符串之间的对齐错误

python - 将子字符串的多个实例替换为列表中的项目

c++ - 如何在 MPI 部分之外处理 IO 等

c++ - 没有用于调用类构造函数的匹配函数

c++ - decltype(auto) 有哪些用途?

javascript - Array.push 不适用于 Nodejs 中的对象

python - 获取排列中删除字符的字符串列表

java - Piglatin,难以理解如何在字符串中移动 '.'

c++ - GL/glx 没有正确链接