Задача на определение количества слов, которые слева и справа читаются одинаково - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Прошу натолкнуть на мысль как решить данную задачу: "Дана строка. Необходимо определить количество слов, которые слева и справа читаются одинаково (палиндромы). Слова разделены пробелами." Из условий для сдачи: доп. массивы - нельзя, функции из <string.h> - нельзя. В моём представлении, нужно как-то разбить на лексемы без strtok и далее в лексемах сравнить символы с кодами ASCII? И можно ли, когда строку с помощью strtok разбил на лексемы и внёс их в массив указателей, далее каждый указатель на строку(полученную лексему) внести в новый массив, чтоб в массиве строка была посимвольно сохранена? Пример: была строка "Скоро сдача работы" -> далее стал массив из 4 указателей -> затем первый указатель, ктр косвенно адресует строку "Скоро", как-то внести в новый массив посимвольно. Заранее спасибо. 1 курс заочки, могу изъясняться как колхоз, т.к. до этого программирование ассоциировалось с тетрисом.

Решение задачи: «Задача на определение количества слов, которые слева и справа читаются одинаково»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    char str[255] = "", *first, *last, *ptr;
    int i = 0, count = 0, len = 0, flag;
    fgets(str, 255, stdin);
    while(str[i]){
        if(str[i] != ' ' && str[i] != '\n')
            len++;
        else{
            if(str[i - 1] != ' '){
            for(last = &str[i - 1], ptr = first = last - len + 1, flag = 0; first < last; first++, last--){
                if(*last != *first){
                    flag = 1;
                    break;
                }
            }
            if(!flag){
                first =  ptr;
                while(*first != ' ' && *first != '\n')
                    putchar(*first++);
                count++;
                putchar('\n');
            }
            len = 0;
            }
        }
        i++;
    }
    printf("Total %d words.\n", count);
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные: строку str, указатель first, указатель last, указатель ptr и целочисленные переменные i, count, len и flag
  3. Считываем строку с помощью fgets
  4. Проходим по каждому символу строки
  5. Если текущий символ не пробел и не символ новой строки, увеличиваем счетчик длины слова
  6. Если текущий символ - пробел или символ новой строки, проверяем, является ли предыдущий символ пробелом
  7. Если предыдущий символ - пробел, начинаем проверку слова на одинаковость символов с начала и конца
  8. Если все символы слова одинаковые, выводим слово на экран и увеличиваем счетчик слов
  9. После проверки слова, сбрасываем счетчик длины слова и проходим по символам слова слева направо, выводя их на экран
  10. После прохождения всего ввода, выводим общее количество слов

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы