【问题标题】:C++ - using strcmp to compare which name comes first in alphabetical orderC++ - 使用 strcmp 比较哪个名称按字母顺序排在第一位
【发布时间】:2021-01-26 07:41:06
【问题描述】:

我是 C++ 新手,正在尝试实现 lessThan() 成员函数,该函数将左侧的 Personthis 人)与作为参数传入的 Person 进行比较;如果一个人的名字按字母顺序排在第一位,则该人被视为“小于”另一个人。

我在下面创建了我的函数,但是当我运行它时出现错误:

无法将参数 '1' 的 'std::__cxx11::string {aka std::__cxx11::basic_string}' 转换为 'const char*' 到 'int strcmp(const char*, const char* )'

除此之外,我想知道我是否正确使用了this 关键字和strcmp() 函数?应该是< 0吗?

bool Person::lessThan(Person* per){
    if(strcmp(this->name, per->name) < 0){
        return true;
    }else{
        return false;
    }
}

【问题讨论】:

  • 您已将此标记为c,但您似乎正在使用c++std::string。在这种情况下,您需要做的就是return name &lt; per-&gt;name; 并完成它,因为std::string 允许进行比较并且它是首选方法。为了完整起见,您可以像这样修复您的代码:if(strcmp(this-&gt;name.c_str(), per-&gt;name.c_str()) &lt; 0){ 但最好不要这样做。

标签: c++ object boolean constants strcmp


【解决方案1】:

您需要做的就是返回 name &lt; per-&gt;name; 并完成它,因为 &lt;std::string&gt; 允许进行比较并且它是首选方法。

为了完整起见,您可以修复您的代码:

bool Person::lessThan(const Person* per) const {
  return strcmp(this->name.c_str(), per->name.c_str()) < 0;
}

@Retired Ninja

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2012-02-17
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多