Упорядочить слова в строке по возрастанию их длины - C (СИ)
Формулировка задачи:
Нужно упорядочить слова в строке по возрастанию их длины
Найти ошибки
#include "StdAfx.h"
#include "stdio.h"
#include "string.h"
#define m 20
#define n 10
int SortWords(char s[m][n])
{
char tmp[n];
int i, j;
for (i = 0; i<m; i++)
gets_s(s[i]);
for (i = 0; i<m - 1; i++)
for (j = i + 1; j<m; j++)
if (strlen(s[i]) > strlen(s[j]))
{
strcpy_s(tmp, s[i]);
strcpy_s(s[i], s[j]);
strcpy_s(s[j], tmp);
}
}
int main()
{
int i, j;
char mas[m][n];
char tmp[n];
printf("Insert %d words with not more than %d letters \n", m, n);
SortWords(mas[m][n]);
for (i = 0; i<m; i++)
printf("%s\n", mas[i]);
return 0;
}Решение задачи: «Упорядочить слова в строке по возрастанию их длины»
textual
Листинг программы
#include "stdio.h"
#include "string.h"
#define m 20
#define n 10
void SortWords(char s[m][n])
{
char tmp[n];
int i, j;
for (i = 0; i<m; i++)
gets_s(s[i],n-1);
for (i = 0; i<m - 1; i++)
for (j = i + 1; j<m; j++)
if (strlen(s[i]) > strlen(s[j]))
{
strcpy_s(tmp, n-1, s[i]);
strcpy_s(s[i], n-1, s[j]);
strcpy_s(s[j], n-1, tmp);
}
}
int main()
{
int i;
char mas[m][n];
printf("Insert %d words with not more than %d letters \n", m, n-1);
SortWords(mas);
for (i = 0; i<m; i++)
printf("%s\n", mas[i]);
return 0;
}
Объяснение кода листинга программы
Вывод списка элементов кода:
- Вложенные массивы
sиmasпредставляют собой двумерный массив строк, где каждый элементs[i]иmas[i]является строкой, аn- это максимальное количество символов в каждой строке. - В начале функции
main()программа просит ввестиmслов с не более чемn-1символов в каждом слове. - Функция
SortWords()сортирует строки во вложенном массивеsпо возрастанию длины строки. Для этого используется два вложенных цикла: внешний цикл для прохода по всем элементам массива и внутренний цикл для прохода по элементам, начиная с текущего индекса внешнего цикла. - Если текущая строка
s[i]длиннее текущей строкиs[j], то с помощью функцииstrcpy_s()строкаs[i]копируется в буферtmp, а затем строкаs[j]заменяется наtmp. Таким образом, в результате сортировки строкиs[i]становится передs[j]. - В функции
main()после сортировки выводится отсортированный массивmas. - Функция
printf()используется для вывода строки в консоль. - Вложенные циклы в функции
main()используются для прохода по всем элементам массиваmasи вывода каждого элемента на новой строке. - Функция
strcpy_s()используется для копирования строки из одного места в другое. - В функции
main()программа завершается возвратом значения 0. - Вложенные циклы в функции
main()используются для прохода по всем элементам массиваmasи вывода каждого элемента на новой строке.