请教C++ 字符串比较的问题

头文件定义

#pragma once
#include<iostream>
#include<vector>

int max(int a, int b);
float max(float a, float b);
std::string max(const std::string &a, const std::string &b);
int max(const std::vector<int> &v);
float max(const std::vector<float> &v);
std::string max(const std::vector<std::string> &v);
int max(const int *arr[]); // 数组只能声明为指针?

cc文件

#include "practice_2_5.h"
#include<string.h>

int max(int a, int b) {
    return (a > b) ? a : b;
}
float max(float a, float b) {
    return (a > b) ? a : b;
}
std::string max(const std::string &a, const std::string &b) {
    std::cout << "a:" << a << "," << "b:" << b << std::endl;
    bool bigger = a.compare(b);
    return bigger ? a : b;
}

int main() {
    std::cout << max(1,2) << std::endl;
    std::cout << max(1.2f, 2.4f) << std::endl;
    std::cout << max("abc", "abcd") << std::endl;
    return 0;
}

请问为什么返回结果是 abc ?

阅读 117
评论
    1 个回答
    • 8.9k

    string::compare 返回一个 int, 会根据比较结果,返回一个负数(小于)、零(等于)或正数(大于)。

    然后这个结果在转换为 bool 的时候,只要不等于 0 就是 true

    所以你需要的是:

    std::string max(const std::string &a, const std::string &b) {
        std::cout << "a:" << a << "," << "b:" << b << std::endl;
        int bigger = a.compare(b);
        return (bigger > 0) ? a : b;
    }
      撰写回答

      登录后参与交流、获取后续更新提醒