Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Сортировка строк по алфовиту..

Автор: Andrewshkovskii 24.12.2007 3:25

Сообственно хотелось бы узнать : КАК?!
ничего в голову не приходит..разве что каждой букве присвоить свой номер(А=1,Б=2) и т.д и сортировать по сумме...Может кто-нибудь подкинет ссылочку или расскажет?smile.gif

Автор: volvo 24.12.2007 3:27

Собственно, зачем? Использовать strcmp для сравнения двух строк уже нельзя? blink.gif

Автор: Andrewshkovskii 24.12.2007 3:29

Извняюсь,но я не пойму толком как он работает..В хелпе читаю,не понятно=/
ну и хотелось бы увидеть пример сортировки с помощью strcmp .. я понимаю что очень наглый:)но пожалуйста..smile.gif
ах да,забыл добавить,надо отсортировать массив строк.массив такой же,который был в моем топике днем:)Т.Е надо выдать на печать фамилии упорядоченые по алфовиту.

Автор: volvo 24.12.2007 4:12

А чего ты в той же теме вопрос не задал?
http://forum.pascal.net.ru/index.php?showtopic=20916

(To moders: объедините, please, эти 2 темы, одна - логическое продолжение второй)

Вот, я набросал программку, которую можно гонять на предмет сортировки разных полей записи (тем более, что меняется-то на самом деле только одна строка, сравнение элементов):

#include <string.h>
#include <stdio.h>

const int max_name = 10;
const int max_prim = 10;
struct my_s {
char FIO[max_name];
char prim[max_prim];
int vball;
int ekz[5];
int zach[3];
float sball;
};

const int n = 5;
my_s tabl1[n] = {
{"aaafb", "bbbbb", 1, {2, 2, 2, 2, 2}, {3, 3, 3}, 2.2},
{"aabba", "bbbbb", 1, {2, 2, 2, 2, 2}, {3, 3, 3}, 6.2},
{"accaa", "bbbbb", 1, {2, 2, 2, 2, 2}, {3, 3, 3}, 8.2},
{"aaagg", "bbbbb", 1, {2, 2, 2, 2, 2}, {3, 3, 3}, 4.2},
{"aabaa", "bbbbb", 1, {2, 2, 2, 2, 2}, {3, 3, 3}, 1.2}
};


int main() {
for(int i = 0; i < n; i++) {
printf("%s %s %lf\n", tabl1[i].FIO, tabl1[i].prim, tabl1[i].sball);
}

int is = 1;
while(is) {
is = 0;
for (int i = n - 1; i > 0; i--)
if(strcmp(tabl1[i].FIO, tabl1[i-1].FIO) < 0) {

my_s buf;
memmove((void*)(&buf), (void*)(&tabl1[i]), sizeof(my_s));
memmove((void*)(&tabl1[i]), (void*)(&tabl1[i - 1]), sizeof(my_s));
memmove((void*)(&tabl1[i - 1]), (void*)(&buf), sizeof(my_s));
is = 1;
}
}

printf("\n");
for(int i = 0; i < n; i++) {
printf("%s %s %lf\n", tabl1[i].FIO, tabl1[i].prim, tabl1[i].sball);
}

return 0;
}

Автор: Andrewshkovskii 24.12.2007 5:12

хм...спасибо за ответы в двух темах.помогло:)только сортировку я другую написал(ну для моего случая).