Выполнить сортировку слов, расположив их в порядке увеличения количества букв в словах

Выполнить сортировку слов, расположив их в порядке увеличения количества букв в словах

У меня есть код:

#include <stdlib.h>  
#include <iostream>   
int comp1(const void* a, const void* b)
{
    return strcmp(*(char**)a, *(char**)b);
}
using namespace std;
int main()
{
    char* sort_char_array[] = { "about", "this", "and", "url", "that", "the", "i", "hi" };
    int i;
    qsort(sort_char_array, 8, sizeof(char**), comp1); //about and hi i that the this url
    for (i = 0; i < 8; i++)
        cout << sort_char_array[i] << " ";
    cout << "\n";
    system("pause");
}

При запуске выбивает ошибки:

1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,86): error C2440: инициализация: невозможно преобразовать "const char [6]" в "char *"
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,30): message : При преобразовании из строкового литерала теряется квалификатор (см. /Zc:strictStrings)
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,86): error C2440: инициализация: невозможно преобразовать "const char [5]" в "char *"
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,39): message : При преобразовании из строкового литерала теряется квалификатор (см. /Zc:strictStrings)
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,86): error C2440: инициализация: невозможно преобразовать "const char [4]" в "char *"
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,47): message : При преобразовании из строкового литерала теряется квалификатор (см. /Zc:strictStrings)
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,86): error C2440: инициализация: невозможно преобразовать "const char [2]" в "char *"
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,76): message : При преобразовании из строкового литерала теряется квалификатор (см. /Zc:strictStrings)
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,86): error C2440: инициализация: невозможно преобразовать "const char [3]" в "char *"
1>C:\Users\DALVE\source\repos\Project25\Project25\Source.cpp(11,81): message : При преобразовании из строкового литерала теряется квалификатор (см. /Zc:strictStrings)

Как решить данную проблему? В интернете и литературе не нашёл вменяемого ответа.

Также нужно модифицировать код, чтобы char брался из файла f1 и после работы программы готовый результат записывался в файл f2, совсем не понимаю как это сделать, чтобы это работало в моём коде


Ответы (1 шт):

Автор решения: Harry

Если это С++ - то используйте sort, если С - не используйте cout. Ваши проблемы - именно с тем, что код на С вы компилируете как С++... С++ не позволяет рассматривать литералы как char*, а только как константные строки.

Вот на C:

int comp1(const void* a, const void* b)
{
    return strlen(*(char**)a) - strlen(*(char**)b);
}

int main()
{
    char* sort_char_array[] = { "about", "this", "and", "url", "that", "the", "i", "hi" };
    qsort(sort_char_array, 8, sizeof(char*), comp1); //about and hi i that the this url
    for (int i = 0; i < 8; i++)
        printf("%s\n",sort_char_array[i]);
}

А вот как на С++:

int main()
{
    const char* sort_char_array[] = { "about", "this", "and", "url", "that", "the", "i", "hi" };

    sort(sort_char_array,sort_char_array+8,[](const char * a, const char * b)
         { return strlen(a) < strlen(b); });
    for( auto s: sort_char_array)
        cout << s << endl;
}

Когда вы выберете язык программирования и набросаете самостоятельно хоть какое-то чтение из файла и запись - можно будет говорить дальше. А пока у вас получается просто "сделайте за меня домашку".

Если выбираете С - работайте через FILE, если С++ - через потоки.

→ Ссылка