Sortowanie ciągu znaków

0

Witam, mam napisac program, który sortuje znaki od pewnego miejsca.
Ma to wyglądać mniej więcej tak:
na wejście podaje ciąg znaków np jakieś litery
program pyta się od ktorej litery chce sortować
na wyjście posortowany ciąg znaków

alfabet ma tak jakby zatoczyc kółko

Kompletnie nie wiem jak sie za to zabrać. Jeśli ktoś ma jakąś propozycję będę bardzo wdzięczna;)

0

Dobrze cię rozumiem: (bo napisałaś to tak ze w ogóle nie wiadomo co ten program ma robić...)

  1. Ustalamy pierwszą literę alfabetu, np. C, czyli nasz alfabet to będzie teraz:
    CDEF.....ZAB
  2. Sortujemy otrzymany ciąg znaków, zakładając że (w naszym przypadku) C<D<.....<Z<A<B
    O coś takiego chodzi?
0

właśnie tak jak piszesz
masz jakiś pomysł?
to jest mój pierwszy program do napisania i jestem zielona ;/

0

Cześć.

Zadanie jest banalnie proste.
Na początku musisz sobie zdefiniować tablicę, w której będziesz przechowywała wprowadzanie litery. Jeśli chodzi o pytanie, od której litery ma zacząć wypisywanie masz dwa rozwiązania: łatwiejsze i trudniejsze ;-). Łatwiejsze: pytasz się od której litery masz rozpocząć wypisywanie; jako odpowiedź otrzymujesz liczbę i wtedy wypisywanie z tablicy rozpoczynasz od podanej pozycji. Trudniejsze: pytasz się od jakiej litery masz rozpocząć wypisywanie; jako odpowiedź otrzymujesz literę i w tym przypadku będziesz musiała najpierw poszukać tej litery w tablicy, a jak już znajdziesz to rozpocząć wypisywanie. Podczas wypisywania będziesz musiała także kontrolować czy nie doszłaś już do końca tablicy i jeżeli tak to wypisywanie musisz kontynuować od początku tablicy.

Mam nadzieję, że jest to jasne. Jak będziesz miała nadal kłopoty, pisz.

Pozdrawiam.

0

Dementuje: post @moolchass jest bzdurą. On po prostu nie zrozumiał treści.
Zadanie nie jest wcale takie trywialne. Jedyne co mi w tej chwili przychodzi na myśl to kosztowne (:P) pamięciowo i trochę nieeleganckie rozwiązanie:
tworzymy 26-elementową tablicę intów indeksowaną literami alfabetu (albo i nie, to bez większego znaczenia, wtedy wystarczy odejmować od licznika pętli 'a'). Wczytujemy od użytkownika od której litery mamy "rozpoczynać alfabet" i przypisujemy wtedy odpowiednie wagi literom. Mniej więcej w taki sposób:

void ustalWagi(char od_ktorej,int* tablica)
{
  int waga = 0;
  for(char c = od_ktorej;l<'z';l++)
    tablica[c]=waga++;
  for(char c = 'a';l<od_ktorej;l++)
    tablica[c]=waga++;
}

W ten sposób literki uzyskają odpowiednie "wagi" wg załozeń zadania.
Następnie tworzymy sobie metodę porównującą dwa znaki char korzystajac z naszej tablicy

bool mniejsze(char pierwszy, char drugi,int* tablica)
{
  return tablica[pierwszy]<tablica[drugi];
}

Która odpowiada na pytanie czy pierwszy argument jest mniejszy (wg naszego alfabetu) od drugiego.
No i mając tą funkcję mozemy juz zaimplementować w zasadzie każde sortowanie, bo umiemy porównywać znaki char wg naszego nowego alfabetu.

EDIT:
jestem głupi :P istnieje rozwiązanie o wiele łatwiejsze ;)
Do porównywania znaków wystarczy nam użyć
znak%litera.
czyli:

bool mniejsze(char pierwszy, char drugi,char poczatek_alfa) //pierwsza litera porównywana, druga litera porównywana i pierwsza litera nowego alfabetu
{
  return (pierwszy%poczatek_alfa)<(drugi%poczatek_alfa)
}
0

dzięki bardzo
jesteście super
spróbuje napisać z Waszymi wskazówkami
moze coś się uda ;))

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.