Не работает сортировка - 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.