Список студентов рассортировать в алфавитном порядке по двум первым буквам фамилии - C (СИ)
Формулировка задачи:
Здравствуйте все))) помогите решить 'одну задачку))
Список студентов (фамилия, имя, отчество) рассортировать в алфавитном порядке сначала по двум первым буквам фамилии, затем, если первые две буквы фамилии одинаковы, по возрастанию количества букв в фамилии.
сортировка по первым 2 буквам мне удалась, а вот по количеству букв в фамилии..нет.
Ума не приложу, как дальше делать....
#include <stdio.h> #include <string.h> #include <windows.h> #include <iostream.h> #include <conio.h> #define SIZE 81 #define LIM 20 #define HALT "" void main (void); void str_sort(char *[] ,int); char* Rus(const char* text); void main(void) { static char input [LIM][SIZE]; char *ptstr[LIM]; int ct=0; int k,i=0,words=0; printf(Rus("Введите не менее 10 строк.\n")); printf(Rus("Для прекращения ввода нажмите ENTER в начале строки.\n")); while (gets(input[ct])!=NULL && ct<LIM) { if(strcmp(input[ct],HALT)==0) { if(ct<10) { printf(Rus("Введите не менее 10 строк(введено %d)\n"), ct); continue; } break; } ct++; ptstr[ct-1]=input[ct-1]; } str_sort(ptstr,ct); puts(Rus("\nОтсортированный список строк:\n")); for (k=0;k<ct;k++) { puts(ptstr[k]); } getch (); } void str_sort(char *string[],int num) //функция сортирует по превым двум буквам { char *temp; int i,j, k=2; for(i=0;i<num-1,;i++) for(j=i+1;j<num,;j++) if(strncmp(string[i],string[j], k)>0) { temp=string[i]; string[i]=string[j]; string[j]=temp; } } char bufRus[256]; char* Rus(const char* text) { CharToOem(text,bufRus); return bufRus; }
Решение задачи: «Список студентов рассортировать в алфавитном порядке по двум первым буквам фамилии»
textual
Листинг программы
for (j = i+1; j < num; j++) if (strncmp(string[i], string[j], k) > 0 || strlen(string[i]) > strlen(string[j])) { temp = string[i]; string[i] = string[j]; string[j] = temp; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д