Упорядочить элементы символьного массива - 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); }
Объяснение кода листинга программы
В этом коде реализована сортировка пузырьком для символьного массива.
- Входные данные:
array
: указатель на начало символьного массива.num
: указатель на количество элементов в массиве.
- Перебираем все элементы массива с помощью двух вложенных циклов.
- Внешний цикл: итерируемся от 0 до
*num
. - Внутренний цикл: итерируемся от 0 до
*num
, но не включая*num - 1
(так как индексы массива начинаются с 0, а не с 1).
- Внешний цикл: итерируемся от 0 до
- Проверяем, если текущий элемент больше следующего, то меняем их местами.
- Создаем временную переменную
tmp
, которая содержит значение текущего элемента. - Меняем значение текущего элемента на значение следующего элемента.
- Меняем значение следующего элемента на значение
tmp
(т.е. на предыдущее значение текущего элемента).
- Создаем временную переменную
- После завершения внутреннего цикла, выводим отсортированный массив на экран с помощью
puts(array)
. - Возвращаем управление, не указывая, что функция должна возвращать.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д