首页 > 解决方案 > C++ - 使用 strcmp 比较哪个名称按字母顺序排在第一位

问题描述

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

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

无法将 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' 转换为 'const char*' 以将参数 '1' 转换为 'int strcmp(const char*, const char*)'< /p>

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

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

标签: c++objectbooleanconstantsstrcmp

解决方案


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

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

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

@退休忍者


推荐阅读