Упорядочить элементы символьного массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
 
int PROVERKA(char*, int*);
void SortBubble(char*, int*);
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    int n;
    printf("Введите размер массива: ");
    scanf("%d", &n);
    char *arr = (char *) calloc(n, sizeof(char));
    puts("Введите массив");
    fflush(stdin);
    gets(arr);
    *(arr + n)='\0';
 
    if (PROVERKA ( arr, &n) != 0){
        puts("Массив не алфавитно-цифравой");
        return 0;
    }
 
    SortBubble( arr, &n);
 
    free(arr);
 
    return 0;
}
 
int PROVERKA(char *arr, int *n)
{
    int k=0;

    for(int i=0; i<*n; i++){
        if (isalnum(*(arr + i))==0)
            k++;
    }
 
    return k;
}
 
void SortBubble(char *array, int *num)
{
  for(int i=0;i<*num;i++){   
    for(int j=0;j<*num;j++) 
      if(*(array+j)>*(array+j+1)){ 
        char tmp = *(array+j);   
        *(array+j) = *(array+j+1); 
        *(array+j+1) = tmp;      
      }
  }
    puts(array);
}
Упорядочить элементы символьного массива так, чтобы с начала располагались бук- вы, а затем цифры. Другие символы в массиве отсутствуют. Необходимо использовать размещение массивов в динамической памяти. После завершения обработки необходимо освободить занимаемую динамическую память. Необходимо использовать функции. Почему-то вывод не работает в функции

Решение задачи: «Упорядочить элементы символьного массива»

textual
Листинг программы
void SortBubble(char *array, int *num)
{
  for(int i=0;i<*num;i++){   
    for(int j=0;j<*num;j++) // мне кажется что надо здесь до *num - 1 потому что при j = *num - 1 |  *(array+j+1)) 
      if(*(array+j)>*(array+j+1)){ // указывает на '\0' и другие значения будут правее этого значения
        char tmp = *(array+j);   // следовательно будет получаться что символ конца строки находится вначале
        *(array+j) = *(array+j+1);  // поэтому и не выводит строку
        *(array+j+1) = tmp;      
      }
  }
    puts(array);
}

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

В этом коде реализована сортировка пузырьком для символьного массива.

  1. Входные данные:
    • array: указатель на начало символьного массива.
    • num: указатель на количество элементов в массиве.
  2. Перебираем все элементы массива с помощью двух вложенных циклов.
    • Внешний цикл: итерируемся от 0 до *num.
    • Внутренний цикл: итерируемся от 0 до *num, но не включая *num - 1 (так как индексы массива начинаются с 0, а не с 1).
  3. Проверяем, если текущий элемент больше следующего, то меняем их местами.
    • Создаем временную переменную tmp, которая содержит значение текущего элемента.
    • Меняем значение текущего элемента на значение следующего элемента.
    • Меняем значение следующего элемента на значение tmp (т.е. на предыдущее значение текущего элемента).
  4. После завершения внутреннего цикла, выводим отсортированный массив на экран с помощью puts(array).
  5. Возвращаем управление, не указывая, что функция должна возвращать.

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


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

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

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