Так что мне нужно отсортировать массив строк в основном по размеру, который работает без проблем.
Затем я пытаюсь отсортировать файлы одинакового размера в алфавитном порядке и, проще говоря, получается полный беспорядок.
Кодовая часть:
#include <iostream>
#include <string>
using namespace std;
struct strs{
string str;
int sz; //stores size of the string
};
bool compare(string a, string b, int s){ //comparing by characters
for(int i = 0; i < s; i++){
if(a[i] > b[i]) return true;
}
return false;
}
int main(){
int n, chk;
bool ctr;
cin>>n;
strs tab[n];
for(int i = 0; i < n; i++){
cin>>tab[i].str;
tab[i].sz = tab[i].str.size();
}
//Comparing lengths
for(int i = 0; i < n; i++){
chk = i;
for(int j = i + 1; j < n; j++){
if(tab[chk].sz > tab[j].sz){
chk = j;
}
}
if(chk != i){
swap(tab[i].str, tab[chk].str);
swap(tab[i].sz, tab[chk].sz);
}
}
//Comparing characters
for(int i = 0; i < n; i++){
chk = i;
for(int j = i + 1; j < n; j++){
if(tab[chk].sz == tab[j].sz){
ctr = compare(tab[chk].str, tab[j].str, tab[chk].sz);
if(ctr) chk = j;
}
if(tab[i].sz < tab[j].sz) break;
}
if(chk != i){
swap(tab[i].str, tab[chk].str);
swap(tab[i].sz, tab[chk].sz);
}
}
//output
for(int i = 0; i < n; i++){
cout<<tab[i].str<<endl;
}
return 0;
}
И чтобы показать, что я имею в виду под «беспорядком» (копированием с консоли) для ввода:
- стул
- мышь
- угол
- Крушение
- ангел
Вывод выглядит так:
- ангел
- стул
- мышь
- угол
- Крушение
Так что нет ничего похожего на сортировку, и я понятия не имею, каким образом я мог бы попытаться заставить это работать.