字符串数组c ++中的最小元素

时间:2014-10-03 19:55:17

标签: c++ arrays string algorithm

我试图找到字符串数组中的最小元素,但我无法弄清楚如何做到这一点。我提出了这个代码的想法,它完美适用于整数,但不适用于字符串。这将编译,虽然它只检查字符串中的第一个字符的ASCII值。换句话说,在字符串数组中:lists[5] = { "aaa", "z", "cccc", "tt", "jjj"}; 列表[1] “z”是字符串的最小元素。但是,由于'a'是较低的ASCII值,代码将打印出Smallest aaa而不是Smallest z。现在我知道我可以使用.length对字符串中的每个字符做一些深刻的同情,但是我想使用一些简单的东西可以解决这个问题,因为我想将它添加到一个将被重载为整数的函数中我可以在字符串和整数比较之间来回切换。但如果这是不可能的,我将只有两个独立的功能来处理每个。

如果您对如何在字符串数组中找到最小元素有任何建议,该怎么办?

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {


string  lists[5] = { "aaa", "z", "cccc", "tt", "jjj"};
    string smallests;
    smallests = lists[0];
    for (int i = 0; i < 5; i++){
        cout << smallests << endl;
        if (lists[i] < smallests){   // Flip < to > to find largest
            smallests = lists[i];
        }
    }
    cout << "Smallest " << smallests << endl;
    cout << *min_element(lists, lists + 5) << endl;

return 0;
}

2 个答案:

答案 0 :(得分:6)

最简单的方法是注意std::min_element可以传递自定义比较函数。所以,让我们来定义最小的含义。

从评论中看,您似乎需要更短的字符串,然后按字典顺序对它们进行排序。

#include <string>
#include <algorithm>
#include <iostream>

bool smallest(std::string const & lhs, std::string const & rhs) {
    if (lhs.size() < rhs.size())
        return true;
    if (lhs.size() == rhs.size() && lhs < rhs)
        return true;
    return false;
}

int main() {
    std::string lists[5] = { "aaa", "z", "cccc", "tt", "jjj"};
    std::cout << *std::min_element(lists, lists + 5, smallest) << "\n";
}

哪个输出:

z

答案 1 :(得分:-3)

&lt;运算符不会在C中的字符串上工作。您需要使用string.h提供的strcmp

http://www.tutorialspoint.com/c_standard_library/string_h.htm

您要比较的代码变为:

if (strcmp(lists[i], smallests) < 0) {
    smallests = lists[i];
}