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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.     char str[255] = "", *first, *last, *ptr;
  7.     int i = 0, count = 0, len = 0, flag;
  8.     fgets(str, 255, stdin);
  9.     while(str[i]){
  10.         if(str[i] != ' ' && str[i] != '\n')
  11.             len++;
  12.         else{
  13.             if(str[i - 1] != ' '){
  14.             for(last = &str[i - 1], ptr = first = last - len + 1, flag = 0; first < last; first++, last--){
  15.                 if(*last != *first){
  16.                     flag = 1;
  17.                     break;
  18.                 }
  19.             }
  20.             if(!flag){
  21.                 first =  ptr;
  22.                 while(*first != ' ' && *first != '\n')
  23.                     putchar(*first++);
  24.                 count++;
  25.                 putchar('\n');
  26.             }
  27.             len = 0;
  28.             }
  29.         }
  30.         i++;
  31.     }
  32.     printf("Total %d words.\n", count);
  33.     return 0;
  34. }

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы