Начал писать программу по по поиску палиндромов. Предварительно идёт обработка текста, из которого я убираю все знаки препинания и пробелы (кроме точек). Дошел до алгоритма сравнения строк, и, казалось бы, всё должно работать, но командна строка выдаёт следующее:
авенисеесинева
вениЁѵеЁѸнева
нет
аламамала
Ѱламамала
нет
Первая строка - сам палиндром.
Вторая строка - палиндром, который я записал в массив в обратную сторону для последующей проверки на схожесть.
Третья строка - Вывод, является ли данный предложения палиндромами.
Мучает вопрос, почему во вторую строку записываются данные "иероглифы"? Вроде как подключил русский язык в код, но, кажется, дело не в этом.
Код самого алгортима:
#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; //из неё вызывается функция выше
}