Сортировка слов по алфавиту

112
06 февраля 2021, 21:10

Задача такова, что в обычном тексте на русском языке, который находится в файле.txt выделить оттуда кусок текста, выбрать из него слова и отсортировать их в алфавитном порядке, используя сортировку расческой. Файл я открыл, нужную часть выделил, хранится она вот здесь

char *b3 = new char[t];

Затем вот так вот я выдернул оттуда все слова, убрав все лишнее:

cout << "Разделение строки на лексемы:\n";
char *next = 0; //для мусора символов
char * pch = strtok_s(b3, " ,.-0123456789;:<>()—[]«»", &next); // во втором параметре указаны разделитель (пробел, запятая, точка, тире)
while (pch != NULL)                         // пока есть лексемы
{
    cout << pch << " ";
    pch = strtok_s(NULL, " ,.-0123456789;:<>()—[]«»", &next);
}

Осталась сама сортировка. Про расческу я прочитал, принцип работы более менее ясен. Вопрос про то, каким образом подходить к сортировке, ведь там есть слова, начинающиеся с большой буквы и т.д. В общем неясно, чем манипулировать при сортировке и с какой стороны к этому подступиться) вот я пытаюсь приравнять все символы к нижнему регистру для равной сортировки

    cout << "Разделение строки на лексемы:\n";
char *next = 0; //для мусора символов
char * pch = strtok_s(b3, ",.-0123456789;:<>()—[]«»?!\n\t\v", &next); // во втором параметре указаны разделитель (пробел, запятая, точка, тире)
while (pch != NULL)                         // пока есть лексемы
{
    for (int i=0; pch[i]; i++) {
        if (isupper(pch[i]))
            pch[i] = tolower(pch[i]);
    i++;
    }
    cout << pch;
    pch = strtok_s(NULL, ",.-0123456789;:<>()—[]«»?!\n\t\v", &next);
}

но выскакивает следующая ошибка

то, что вы там видите в консоли ниже - часть другого задания. и текст до извлечения из него одних слов. по теме будущей сортировки: мне сказали, что скорее всего решение будет таким:между словами будут пробелы, потребуется работа с указателями. поиск символа через strchr, для поиска конца слова пробел. Затем слово копируется во временную переменную strncpy. С указателями я не силен, лишь читал о них, кто-нибудь может разжевать немного подробнее?

READ ALSO
C, откуда 3 байта?

C, откуда 3 байта?

Вот простенький код, на экран выводит число равное 3, почему? откуда взялись эти 3 байта

92
Изменение размера окна с помощью мышки

Изменение размера окна с помощью мышки

Создал окно без рамкиСейчас написал код который работает только при увеличении размеров окна, если пытаться уменьшить то получается белиберда...

142
не могу получить значение ячейки в QTableWidget

не могу получить значение ячейки в QTableWidget

имеется таблица,необходимо было сделать ввод в ячейки только double:

128
Как написать for_each parallel для std::map?

Как написать for_each parallel для std::map?

мне необходимо многопоточно обработать элементы std::mapc++ 17 для это есть for_each parallel, но я работаю на C++ 14

89