如何按字母顺序对字符串进行排序?

新手上路,请多包涵

我一直在尝试使用这个 c++ 程序按字母顺序对 5 个名称进行排序:

 #include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;

int main()
{
char names[5][100];
int x,y,z;

char exchange[100];

cout << "Enter five names...\n";

for(x=1;x<=5;x++)
{
    cout << x << ". ";
    cin >> names[x-1];
}
getch();

for(x=0;x<=5-2;x++)
{
    for(y=0;y<=5-2;y++)
    {
        for(z=0;z<=99;z++)
        {
            if(int(names[y][z])>int(names[y+1][z]))
            {
                strcpy(exchange,names[y]);
                strcpy(names[y],names[y+1]);
                strcpy(names[y+1],exchange);
                break;
            }
        }
    }
}

for(x=0;x<=5-1;x++)
    cout << names[x];

return 0;
}

如果我分别输入 Earl、Don、Chris、Bill 和 Andy,我会得到:

 AndyEarlDonChrisBill

有人可以告诉我我的程序有什么问题吗?

原文由 JayKay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您可以使用字符串的 std::set 或 std::multiset (如果您允许重复的项目),它会自动对项目进行排序(如果需要,您甚至可以更改排序标准)。

 #include <iostream>
#include <set>
#include <algorithm>

void print(const std::string& item)
{
    std::cout << item << std::endl;
}

int main()
{
    std::set<std::string> sortedItems;

    for(int i = 1; i <= 5; ++i)
    {
        std::string name;
        std::cout << i << ". ";
        std::cin >> name;

        sortedItems.insert(name);
    }

    std::for_each(sortedItems.begin(), sortedItems.end(), &print);
    return 0;
}

输入:

  1. 杰拉尔多
  2. 卡洛斯
  3. 卡米洛
  4. 天使
  5. 黄宗泽

输出:

 Angel
Bosco
Carlos
Gerardo
Kamilo

原文由 AngelCastillo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用排序功能:

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

...

vector<string> s;
sort(s.begin(),s.end());

原文由 user7968404 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题