按长度(单词)c ++排序字符串数组

时间:2015-01-16 09:57:30

标签: c++ arrays sorting

我有一个函数来生成一个单词的所有子序列,我将这些子序列保存在一个结构,字符串数组中。现在我想对每个数组进行排序,最短到最长的子序列。我正在尝试使用STD sort(),但我无法弄清楚如何在我的情况下使用它。有什么消息吗?

结构和功能

struct palavras{
    char palavra[1001];
    char final[1001];
    string store[1000];
    int numero;
}p[1001];

void encontra(const char *s, int n)
{
    string str;
    int nn=0;
    while(*s)
    {
        int x=0;
        while(*(s + x))
        {
            for(int y = 0; y <= x; y++)
                str+=s[y];
                p[n].store[nn]=str;
                nn+=1;
                str.clear();
            x++;
        }
        s++;
    }
    p[n].numero=nn;
}

2 个答案:

答案 0 :(得分:1)

您可以使用std::sort

std::vector<std::string> vec{ "a", "abcd", "abc", "ab" };
std::sort(vec.begin(), vec.end(), [](const std::string &s1, const std::string &s2) {return s1.size() < s2.size(); });

答案 1 :(得分:1)

std::sort有一个版本接受&#34;比较器&#34;,所以你唯一需要做的就是定义一个比较字符串的比较器。

struct compare_length {
    bool operator()(const std::string &l, const std::string &r) const {
        return l.size()<r.size();
    }
};

然后你可以使用这个比较器对你的单词数组进行排序:

std::sort(store, store+n, compare_length());

在C ++ 11中,您甚至可以使用lambda使其成为单行:

std::sort(store, store+n, [](const std::string &l, const std::string &r) { return l.size()<r.size(); });