@nilinad_vlr

Как найти в строке слова-палиндромы?

Не могу решить задачку на Си:

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

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

void polydrome(char **word){
    int x;
    int y;
    int lenth = strlen(word);
    for(x = 0, y = lenth-1 ; x < y; x++, y--){
        if(word[x] != word[y]){
            return;
        }
    }
    printf("\n%s",word);
}

int main() {

    //Инициализация переменных
    char line[80] = "";
    char **words[80];
    int count = 0;
    FILE *input;

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

    //Вывод всех данных
    fscanf(input, "%s", line);
    printf ("Исходная строка: %s\n", line);

    //Разделение на отдельные слова и вывод
    printf ("Результат разбивания:\n");
    words[count] = strtok(line, ";");
    while (words[count] != NULL){
        printf("%s\n", words[count]);
        count++;
        words[count] = strtok(NULL, ";");
    }

    //Вывод слов-полидромов
    printf("Слова-полидромы: \n");
    for(int i = 0; i < count; i++){
        polydrome(words[i]);
    }
}
  • Вопрос задан
  • 606 просмотров
Пригласить эксперта
Ответы на вопрос 2
@galaxy
А ошибки и предупреждения компилятора не пробовали читать?

void polydrome(char **word){ -> void polydrome(char *word){

char **words[80]; -> char *words[80];
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Проблема в том, что word у вас массив двойных указателей (**). Тогда как strtok возвращает обычный указатель.
Из-за этого тут
if(word[x] != word[y])
вы сравниваете 2 указателя, а не 2 символа.

Вообще я бы убрал массив word в принципе. Вы сразу можете вызывать polyndrome после того как нашли очередное слово.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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