C++ - 为学校构建自己的字符串类,无法正确重载<运算符
C++ - Building my own String class for school, can't overload < operator correctly
这是我现在的(str是一个动态的,null终止的字符数组):
bool String::operator<(const String& rhs) const {
if (str == rhs.str)
return false;
int i = 0;
while (str[i] != ' ' && rhs[i] != ' ') {
if (str[i] > rhs[i])
return false;
++i;
}
return true;
}
这通过了大多数测试,但在
String s1("abc");
String s2("abcde");
assert(!(s2 < s1));
无论我如何改变函数,它似乎总是不能通过这样或那样的测试。如何重载这个操作符?基本上,我只需要比较两个以null结尾的字符数组,看看哪个较小(不需要任何库)。
可以利用以空结尾的字符串将基本算法简化为:
- 当两个字符串的
n
第1个字符相同时(n
从0开始递增): - 如果两个字符串的
n
第1个字符为' '
,则两个字符串明显相同,否则: - 否则,将
n
的第5个字符作为无符号值进行比较,以确定比较结果。
如果你将循环设置为:
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;
相关文章:
- C++重载<<具有typedef'd std::vector
- 重载运算符<<:此运算符函数的参数太多
- 在VS 2012上编译,但不使用Netbeans/MinGW-重载<<
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- C++分离成员流重载<<
- 我已经完成了<<运算符重载,但它'It’不起作用
- 重载运算符<<输出地址而不是数据成员
- 重载运算符<<用于ostream语法
- 重载operator< & lt;作为会员打印
- Operator< & lt;重载隐藏其他
- 重载& lt; & lt;为什么我得到以下错误
- 重载ostream&时转换错误无效;operator< & lt;
- operator< & lt;在c++中为类中的类重载
- 重载& lt; & lt;用于打印自定义异常的操作符
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多
- 上Ostream & lt; & lt;重载的困惑
- 重载& lt; & lt;为了我的班级
- 使用带有重载<<endl上的运算符
- 重载& lt; & lt;使用命名空间std
- 重载& lt; & lt;错误