Сортировка слов от минимального количества символов к большинству символов в C - PullRequest
0 голосов
/ 16 мая 2018

Мне было поручено решить следующий вопрос с использованием массива указателей:

Напишите два прототипа для функции, которая упорядочивает список строк в соответствии с длина строки - от самой короткой до самой длинной. Во-первых, функция должна ожидать аргумент ввода / вывода, представляющий собой двумерный массив символов, в котором строки имеют не более STRSIZ символов. Во вторых, функция должна ожидайте входной / выходной аргумент, который является массивом указателей.

В настоящее время я написал эту кодировку для нее и не могу сказать, почему она не работает должным образом для меня:

int number;
int a;
int b;
char placeholder;
char words[100];
char wordscopy[100];

printf("Enter the amount of words or names you wish to sort (0 - 100) :\n");
scanf_s("%d", &number);

printf("Enter names or words on separate lines\n");
for (a = 0; a < number; ++a)
scanf_s("%s", &words[a]);

for (a = 0; a < number; ++a)
    words[a] = wordscopy[a];

for (a = 0; a < number; ++a)
{
    for (b = a + 1; b < number; ++b)
    {
        if (strlen(wordscopy[a]) < strlen(wordscopy[b]))
        {
            placeholder = wordscopy[a];
            wordscopy[a] = wordscopy[b];
            wordscopy[b] = placeholder;
        }
    }
}
printf("\n\n%-30s%5c%-30s\n\n", "Original Order", ' ',"Least Letters to Most Letters");
for (a = 0; a < number; ++a)
printf("%-30s%5c%-30s\n", words[a], ' ', wordscopy[a]);
printf("\n\n");


return 0;

Я довольно новичок в кодировании и не могу понять, почему программа не работает для меня.

Выходные данные должны быть:

Original Order               Least Letters to Most Letters
Brad                         Brad
Matthew                      Megan
Brandon                      Brandon
Megan                        Matthew
Melissa                      Melissa

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать qsort для сортировки строк по их размеру

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN 25

int compare (const void * a, const void * b) {
    size_t fa = strlen((const char *)a);
    size_t fb = strlen((const char *)b);
    return (fa > fb) - (fa < fb);
}

int main() {

    int num_words;
    scanf("%d", &num_words);

    char word[MAXLEN];


    char input[num_words][MAXLEN];
    for(int i = 0; i < num_words; i++ ) {
        scanf("%s", word);
        strcpy(input[i], word);
    }

    qsort(input, num_words, MAXLEN, compare);
    for(int i = 0; i < num_words; i++)
        printf("%s\n", input[i]);
    return 0;
}

Результат отсортирован по размеру строки:

Input:              Output:

Brad                Brad
Matthew             Megan
Brandon             Brandon
Megan               Melissa
Melissa             Matthew
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...