如何在c++中根据字符串长度对字符串数组进行排序?

o4hqfura  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(201)

我正在尝试用这种方式对字符串数组进行排序。但是数组的第一个字符串打印不正确。我怎样才能用一种简单的方式来编写它呢?我需要用它来进行竞争性的编程。所以,如果代码简短就好了。

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    string s[] = {"midnight", "Coder", "comp", "Wedn", "Top", "at"};
    int n = sizeof(s)/sizeof(s[0]);
    sort(s->begin(), s->end());
    for (int i = 0; i < n; i++)
    {
        cout<<s[i]<<" ";
    }
    return 0;
}

输出结果:dghiimnt编码器组件WednTop位于
预期输出:午夜编码员大会Wedn Top

g6ll5ycj

g6ll5ycj1#

在C++20中,你可以这样做:

#include <algorithm>
#include <iostream>

int main()
{
    std::string s[] = {"midnight", "Coder", "comp", "Wedn", "Top", "at"};

    std::ranges::sort(s, std::greater{}, &std::string::size);

    for (const auto &it : s)
        std::cout << it << " ";
}
  • std::greater{}意味着较大的元素应该放在前面(与默认的std::less{}相反)。
  • &std::string::size意味着我们按照.size()的返回值排序,而不是直接比较元素。

我还修正了一些风格问题。

tjrkku2a

tjrkku2a2#

一种方法(可能是最简单的)是使用lambda,如下所示。

int main()
{
    string s[] = {"midnight", "Coder", "comp", "Wedn", "Top", "at"};
    int n = sizeof(s)/sizeof(s[0]);
    //use lambda 
    sort(std::begin(s), std::end(s), [](const std::string &a, const std::string &b)
    {
        return a.size() > b.size();
    });
    for (int i = 0; i < n; i++)
    {
        cout<<s[i]<<" ";
    }
    
}

working demo

相关问题