Упорядочить слова в строке по возрастанию их длины - 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;
}

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

Вывод списка элементов кода:

  1. Вложенные массивы s и mas представляют собой двумерный массив строк, где каждый элемент s[i] и mas[i] является строкой, а n - это максимальное количество символов в каждой строке.
  2. В начале функции main() программа просит ввести m слов с не более чем n-1 символов в каждом слове.
  3. Функция SortWords() сортирует строки во вложенном массиве s по возрастанию длины строки. Для этого используется два вложенных цикла: внешний цикл для прохода по всем элементам массива и внутренний цикл для прохода по элементам, начиная с текущего индекса внешнего цикла.
  4. Если текущая строка s[i] длиннее текущей строки s[j], то с помощью функции strcpy_s() строка s[i] копируется в буфер tmp, а затем строка s[j] заменяется на tmp. Таким образом, в результате сортировки строки s[i] становится перед s[j].
  5. В функции main() после сортировки выводится отсортированный массив mas.
  6. Функция printf() используется для вывода строки в консоль.
  7. Вложенные циклы в функции main() используются для прохода по всем элементам массива mas и вывода каждого элемента на новой строке.
  8. Функция strcpy_s() используется для копирования строки из одного места в другое.
  9. В функции main() программа завершается возвратом значения 0.
  10. Вложенные циклы в функции main() используются для прохода по всем элементам массива mas и вывода каждого элемента на новой строке.

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


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

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

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