@greetrays_kap

Как нормально выводить русские буквы(СИ)?

Начал писать программу по по поиску палиндромов. Предварительно идёт обработка текста, из которого я убираю все знаки препинания и пробелы (кроме точек). Дошел до алгоритма сравнения строк, и, казалось бы, всё должно работать, но командна строка выдаёт следующее:

авенисеесинева
вениЁѵеЁѸнева
нет

аламамала
Ѱламамала
нет

Первая строка - сам палиндром.
Вторая строка - палиндром, который я записал в массив в обратную сторону для последующей проверки на схожесть.
Третья строка - Вывод, является ли данный предложения палиндромами.

Мучает вопрос, почему во вторую строку записываются данные "иероглифы"? Вроде как подключил русский язык в код, но, кажется, дело не в этом.

Код самого алгортима:
#include "palindrom.h"
#include <stdio.h>
#include <locale.h>
#include <string.h>

int search_pal (char *prop, int count){
  setlocale(LC_ALL, "Rus");
  int i, j = 0;
  char prop2[count];
  count = count - 1;
  for (i = count; i >= 0; i--){
    prop2[j] = prop[i];
    j++;
  }
  puts(prop);
  puts(prop2);
  if(strcmp(prop,prop2)==0)
    puts("да\n");
  else
    puts("нет\n");
printf("\n");
}


Код функции main:
#include "palindrom.h"
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define CONST 100000

int main(int argc, char* argv[])
{
    int size = 0;
    setlocale(LC_ALL, "Rus"); //подключаем русский язык
    char* text = NULL; //создаём указатель на массив
    text = (char*)malloc(CONST * sizeof(int)); //выделяем память под константу
    FILE* text_file;
    text_file = fopen(argv[1], "r"); //открываем файл для чтения
    if (text_file != NULL) { //идёт проверка на NULL
        while (fgets(text, CONST, text_file)) { // получаем данные из файла
        }
    } else {
        printf("Ошибка: Аргумент не найден.\n ");
    }
    for (int i = 0; text[i] != '\0'; i++){ //подсчёт размера в строке
      size++;
    }
    text = realloc(text, size * sizeof(int)); //перераспределям память под размер
    printf ("Ваш текст:\n\n"); //вывод текста пользователя на экран
    for (int i = 0; i < size; i++) {
        printf("%c", text[i]);
    }
    breaking_up(text, size); //эта функция избавляет текст от символов и пробелов, 
    return 0;                       //из неё вызывается функция выше
}
  • Вопрос задан
  • 1326 просмотров
Решения вопроса 1
@galaxy
Это могло вы работать на 8-битных кодировках, а у вас небось UTF-8.
В ней русские буквы занимают 2 байта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы