Napisałem funkcję która porównuje 2 teksty. Opis funkcji jest w komentarzu w kodzie. Funkcja porównuje 2 wyrazy i zwraca odpowiedni znak ">, <, ="
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cmath>
using namespace std;
char STR_SORTOWANIE(char* wyraz1, char* wyraz2, char* wzorzec, int* inny);
/*
Funkcja na podstawie wzorca określi, który wyraz jest mniejszy
Jeżeli wzorzec == NULL wtedy sortowanie będzie alfabetyczne
Funkcja sprawdz we wzorcu co 2 znaki tzn.
wzorzec = "AaBb" Aa - są równoważne
Bb - są równoważne
tak więc jak chcesz posegregować bez znaków równoważnych wpisz "aabb"
Funkcja zwraca > jeżeli wyraz1 jest pierwszy w słowniku
< jeżeli drugi
= jeżeli wyrazy są takie same
Jeżeli ciągi nie są takie same, w zmiennej 'inny' zostanie zapisana pozycja
pierwszego sprawdzanego znaku, który nie był taki sam.
Parametr 'inny' moze przyjąć wartość NULL
*/
char STR_SORTOWANIE(char* wyraz1, char* wyraz2, char* wzorzec, int* inny)
{
char wzorzec2[]="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz00112233445566778899";
if(wzorzec == NULL)
wzorzec = &wzorzec2[0];
int d1 = strlen(wyraz1);
int d2 = strlen(wyraz2);
int d3 = strlen(wzorzec);
int d;
if(d1 >= d2)
d = d2;
if(d2 >= d1)
d = d1;
for(int n=0; n<d; n++)
{
int pozycja1, pozycja2;
for(int m=0; m<=d3; m+=2)
if(wyraz1[n] == wzorzec[m] || wyraz1[n] == wzorzec[m+1])
pozycja1 = m;
for(int m=0; m<=d3; m+=2)
if(wyraz2[n] == wzorzec[m] || wyraz2[n] == wzorzec[m+1])
pozycja2 = m;
if(pozycja1 < pozycja2)
{
if(inny != NULL)
*inny = n;
return '>';
}
if(pozycja2 < pozycja1)
{
if(inny != NULL)
*inny = n;
return '<';
}
}
if(d1 > d2){
if(inny != NULL)
*inny = d1-(d1-d2);
return '<';}
if(d2 > d1){
if(inny != NULL)
*inny = d2-(d2-d1);
return '>';}
if(d2 == d1){
if(inny != NULL)
*inny = -1;
return '=';}
}
int main()
{
int inny;
char znak = STR_SORTOWANIE("pUkAwki", "pukawka", NULL, &inny);
cout<<znak<<endl;
cout<<inny;
getch();
}
Według mnie jak masz tablicę char[150][200] wypełnioną tekstem porównuj pierwszy tekst z drugim, z trzecim itd. Jak któryś tekst jest "większy" (nie wiem jak to powiedziec) to porównujesz jego z kolejnymi wyrazami. Jak doszedleś do końca tablicy zerujesz komórki tego wyrazu (największego), wstawiasz go na pierwsza pozycję listy i omijając wyzerowane komórki sprawzdasz od początku wyrazy na tej samej zasadzie jak poprzednio, tym razem zapisujesz je na 2 pozycję listy. Jak wszystkie komórki będą wyzerowane wtedy masz gotowy posortowany tekst.