Я написал код, который сортирует строки относительно первого символа в строке. Код прекрасно работает с латиницей, и выводит отсортированные строки, но вывод символов кириллицы происходит неправильно.
Это странно, учитывая то, что print'ы которые находятся вне цикла for(), выводят кириллицу нормально.
#include <stdio.h>
#include <locale.h>
#include <iostream>
#include <string>
int main() {
setlocale(LC_ALL, "Rus");
char** A = NULL;
bool sorted_a_to_z;
int count = 0;
std::string quit_condition = "";
printf("Для завершения ввода строка введите Enter\n");
do {
A = (char**)realloc(A, ++count * sizeof(char*));
*(A+count-1) = (char*)malloc(100 * sizeof(char));
std::cin.getline(*(A+count-1), 100);
} while (*(A+count-1) != quit_condition);
printf("Ввод строк окончен\n\n");
int checker = 0;
while (checker != count - 2)
{
for (int i = 0; i < count - 2; i++) {
if (**(A + i) >= **(A + i + 1))
{
std::swap(*(A + i), *(A + i + 1));
}
}
checker = 0;
for (int i = 0; i < count - 2; i++)
{
sorted_a_to_z = (A[i][0] <= A[i + 1][0]);
if (sorted_a_to_z)
{
checker++;
}
}
}
printf("Отсортированный список строк:\n\n");
for (int i = 0; i < count-1; i++)
{
printf("%s\n",A[i]);
}
return 0;
}
Думаю есть два варианта развития событий:
1)"Посимвольное сравнение" кириллицы работает по немного иным принципам, следовательно код юзабелен только для латиницы.
2) Проблема все-таки конкретно в выводе кириллицы.
Прошу вас помочь мне с этим разобраться. Ну и отметить так же другие ошибки.
Пример входных-выходных данных для латиницы:
Для завершения ввода строка введите Enter
zero
big
apple
drow
Ввод строк окончен
Отсортированный список строк:
apple
big
drow
zero
Пример входных-выходных данных для кириллицы:
Для завершения ввода строка введите Enter
яблоко
атом
берег
вода
Ввод строк окончен
Отсортированный список строк:
вR┐
Ў?а??
ўR¤
пЎ<RЄR