Как отсортировать строки по алфавиту?

Я пытался использовать эту программу 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;
}

Если я введу Эрла, Дона, Криса, Билла и Энди соответственно, я получу это:

AndyEarlDonChrisBill

Может кто-нибудь сказать мне, что не так с моей программой?

-3

Решение

Вы можете использовать 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. Carlos
  3. Kamilo
  4. ангел
  5. Bosco

выход:

Angel
Bosco
Carlos
Gerardo
Kamilo
4

Другие решения

Вы можете использовать функцию сортировки:

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

Ваш код реализует один проход пузырьковая сортировка. По существу, отсутствует цикл «повторять до тех пор, пока в массив не будут внесены изменения».

0

Код не заботится, когда имена уже в порядке. Добавьте следующее

else if(int(names[y][z])<int(names[y+1][z]))
break;

К заявлению if.

0

Вы используете слишком много ненужных циклов. Попробуйте этот простой и эффективный. Вам нужно просто поменять местами, когда строка в алфавитном порядке позже, чем другая строка.

Input
5
Ashadullah
Shawon
Shakib
Aaaakash
Ideone

Output
Aaaakash
Ashadullah
Ideone
Shakib
Shawon#include <bits/stdc++.h>
using namespace std;
int main()
{
string s[200],x[200],ct,dt;
int i,j,n;
cin>>n;
for(i=0;i<n;i++)
{
cin>>s[i];
}

for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{

if(s[i]>s[j])
{

ct=s[i];
s[i]=s[j];
s[j]=ct;

}

}

}
cout<<"Sorted Name in Dictionary Order"<<endl;
for(i=0;i<n;i++)
{
cout<<s[i]<<endl;
}
return 0;}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector