Задать вопрос
@nilinad_vlr

Помощь с задачкой на Си?

Не получается решить задачу.
Дана символьная строка, в которой слова перечислены через точку с запятой, а общая длина < 80. Найти и напечатать все слова, ко- торые представляют собой слово-палиндром.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Функция, проверяющая является ли слово палидромом
void isPalindrom (char word[]){
    int length = strlen(word);
    int i,j;
    for (i = 0, j = length-1; i < j; i++, j--){
        if (word[i] != word[j]){
            printf(" - Не палидром");
            return;
        }
    }
    printf(" - Палидром");

}

int main(void){

    //Инициализация переменных
    char str[80];
    char* word;
    FILE *input;


    //Проверка открытия файла
    if((input = fopen("/Users/nilinadvlr/Desktop/lab5/lab5/stre.txt","r"))==NULL){
        printf("Файл не открылся\n");
        exit(1);
    }

    //Сканирование и вовыд строки
    fscanf(input, "%s", str);
    printf("Строка: %s", str);

    //Разделение на отдельные слова
    word=strtok(str,";");

    //Анализ каждого слова
    while (word != NULL) {
        printf("\nСлово: %s",word);
        isPalindrom(word);
        word = strtok (NULL, ";");
    }
    printf("\n");
}


С английским алфавитом все работает правильно, но с русским алфавитом уже получается полный бред. В чем проблема. Мб надо кодировку файла менять или локализацию как то делать?
  • Вопрос задан
  • 120 просмотров
Подписаться 2 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Раз с русскими буквам не работает - это значит, что русские буквы идут в каком-нибудь utf-8 формате. Тогда один символ может задаваться несколькими байтами. Ваша работа с char проверяет, что слова являются полиндромами побайтово, что в случае utf-8 не то же самое, что посимвольно.

Попробуйте или поменять кодировку файла на что-нибудь вроде CP1251.

Или перепишите вашу программу используя wchar_t* и wcstok()
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы