2014-10-03 102 views
-1

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

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

#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; 
} 
+4

如最小长度?或按字母顺序? – CoryKramer 2014-10-03 19:56:24

+0

好吧,但我现在可以看到按字母顺序排列。如字符串列表[5] = {“a”,“z”,“c”,“t”,“j”};都将是相同的长度。但一次只能做一件事,因为那张支票就是现在的代码。 – 2014-10-03 20:00:55

回答

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 
+0

嘿,这是一个不错的主意。 – 2014-10-03 20:13:05

-3

的<运营商不会对C.字符串的工作,你需要使用string.h中提供的strcmp

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

您的代码进行比较就变成了:

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

这是C++。 'operator <'是非常明确的。 – 2014-10-03 20:07:25

+0

这是C++,并且字符串类HAVE <操作符(列表是字符串类型的) – PhpLou 2014-10-03 20:07:55

+1

如果不使用'c_str'函数,则不起作用。 – 2014-10-03 20:14:56

相关问题