Дано предложение. Расположить слова в порядке возрастания числа букв в них - C (СИ)
Формулировка задачи:
Помогите пожалуйста с задачей: Дано предложение. Расположить слова в порядке возрастания числа букв в них.
Заранее спасибо кто откликнется
Решение задачи: «Дано предложение. Расположить слова в порядке возрастания числа букв в них»
textual
Листинг программы
/*Дано предложение. Расположить слова в порядке возрастания числа букв
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 1024 //max length of text
#define LEN 20 //max length of word
char **ArrayOfWords(char *s, int &num, int &rows)
{ char **arr, *word;
int i, N;
N = strlen(s) / 2;
arr = (char**) malloc(N);
for (i = 0; i<N; i++)
arr[i] = (char*) malloc(LEN);
word = strtok (s," ,.-");
strcpy(arr[0], word);
i = 1;
while (word != NULL)
{ word = strtok (NULL, " ,.-");
if (word == NULL) break;
strcpy(arr[i], word);
i++;
}
rows = N; //max number of words
num = i; //real number of words
return arr;
}
void Swap (char *a, char *b)
{ char *temp = (char*) malloc (LEN);
strcpy(temp, a);
strcpy(a, b);
strcpy(b, temp);
}
void Sorted (char **arr, int num)
{ int i, j;
for (i = 0; i<num-1; i++)
for (j = i+1; j<num; j++)
if (strlen(arr[i]) > strlen(arr[j]))
Swap (arr[i], arr[j]);
}
int main()
{ char buf[SIZE], **arr;
int i, M = 0, rows = 0; //M - real number of words
printf("Your string:\n");
fgets(buf, SIZE, stdin);
buf[strlen(buf) - 1] = '\0';
arr = ArrayOfWords(buf, M, rows);
Sorted (arr, M);
printf("\n\nThe words sorted:\n");
for (i = 0; i<M; i++)
puts(arr[i]);
getchar();
return 0;
}
Объяснение кода листинга программы
В данном коде на языке C представлена функция, которая принимает в качестве параметров строку, указатель на количество слов и указатель на количество строк.
Функция сначала разбивает входную строку на слова, используя разделители ,.-, затем выделяет память под массив указателей на слова.
Далее функция сортирует полученный массив слов в порядке возрастания длины слов.
В основной функции программы вызывается функция ArrayOfWords для разбиения входной строки на слова и подсчета количества слов.
Затем вызывается функция Sorted для сортировки слов.
Наконец, с помощью цикла выводятся отсортированные слова.