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

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с памятью, вводом/выводом и сравнением строк.
  2. Создание функции arr_cmp для сравнения двух указателей на строки.
  3. Инициализация массива s строкой qwerty длиной не более BUFSIZ - 1 символов.
  4. Вывод текущей длины строки с помощью функции printf.
  5. Сортировка строки s с помощью функции qsort с передачей в нее указателя на начало строки, длины строки, размера единицы сортировки (в данном случае 1) и функции сравнения arr_cmp.
  6. Вывод отсортированной строки с помощью функции printf.
  7. Ожидание нажатия клавиши с помощью функции getch.
  8. Завершение работы программы с возвратом 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5
Похожие ответы