Не работает сортировка - C (СИ) (77982)
Формулировка задачи:
Добрый вечер! У меня проблемка с сортировкой, вместо сортировки происходит вообше не знаю что =\
Остальное все вроде правильно.
Вот собственно код:
#include <stdio.h> #include <windows.h> #define N 100 char size_arr(char Array[N]) { char i=0,k=0; while (Array[i]!='\0') i++,k++; return k; } char RandomFill(char basic_arr[N]) { char i,j; srand(time(NULL)); for (i=0;i<N;basic_arr[i]=21+rand()%(254+1-21),i++); basic_arr[N]='\0'; } char Select_print(char sel_arr[N]) { char str[50]; if (size_arr(sel_arr)==N) CharToOem("Исходный массив:\n", str), printf("%s", str); else if ((sel_arr[0]>='0') && (sel_arr[0]<='9')) CharToOem("ЦИФРЫ:\n", str), printf("%s", str); else if ((sel_arr[0]=='!') || (sel_arr[0]==';') || (sel_arr[0]==':') || (sel_arr[0]==',') || (sel_arr[0]=='.') || (sel_arr[0]=='?')) CharToOem("Знаки:\n", str), printf("%s", str); } char Print(char print_arr[N]) { char i=0; Select_print(print_arr); while (print_arr[i]!='\0') printf("%c",print_arr[i]),i++; printf("\n\n\n"); } char sorting(char sort_arr[N]) { char tmp, str[50]; int i, j; for(i=0; i<N; i++) { tmp=sort_arr[i]; for(j=i-1; j>=0&&sort_arr[j]>tmp; --j) { sort_arr[j+1]=sort_arr[j]; } sort_arr[j+1]=tmp; } CharToOem("Сортировка:\n", str), printf("%s", str); Print(sort_arr); } char Select(char new_arr[N]) { char numb_arr[N],chr_arr[N]; char i=0,j=0,k=0; numb_arr[0]='\0'; chr_arr[0]='\0'; while (new_arr[i]!='\0') { if ((new_arr[i]>='0') && (new_arr[i]<='9')) numb_arr[j]=new_arr[i],numb_arr[j+1]='\0',j++; if ((new_arr[i]=='!') || (new_arr[i]==';') || (new_arr[i]==':') || (new_arr[i]==',') || (new_arr[i]=='.') || (new_arr[i]=='?')) chr_arr[k]=new_arr[i],chr_arr[k+1]='\0',k++; i++; } Print(numb_arr); Print(chr_arr); sorting(numb_arr); sorting(chr_arr); } int main() { char mas[N]; RandomFill(mas); Print(mas); Select(mas); return 0; }
Забыл задание.
Заполнить рандомно массив, выделить цифры и знаки препинания в отдельные массивы, отсортировать их.
Решение задачи: «Не работает сортировка»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int arr_cmp (const void *a, const void *b) { return strcmp ( ((char *) a), ((char *) b) ) ; } int main(int argc, char* argv[]) { char s[BUFSIZ] = "qwerty"; // На самом деле размер памяти выдеоенной под указатель равен BUFSIZ // Но длина строки = кол-во символ (не путайте эти понятия) и она должна быть <= BUFSIZ - 1 printf ("Str : %s", s); qsort (s,strlen(s),1,arr_cmp); // printf ("\nNewSrt : %s", s); getch (); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с памятью, вводом/выводом и сравнением строк.
- Создание функции
arr_cmp
для сравнения двух указателей на строки. - Инициализация массива
s
строкойqwerty
длиной не более BUFSIZ - 1 символов. - Вывод текущей длины строки с помощью функции
printf
. - Сортировка строки
s
с помощью функцииqsort
с передачей в нее указателя на начало строки, длины строки, размера единицы сортировки (в данном случае 1) и функции сравненияarr_cmp
. - Вывод отсортированной строки с помощью функции
printf
. - Ожидание нажатия клавиши с помощью функции
getch
. - Завершение работы программы с возвратом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д