Выполнить сортировку слов, расположив их в порядке увеличения количества букв в словах
Выполнить сортировку слов, расположив их в порядке увеличения количества букв в словах
У меня есть код:
#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 шт):
Если это С++ - то используйте 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, если С++ - через потоки.