Задача на определение количества слов, которые слева и справа читаются одинаково - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные: строку
str
, указательfirst
, указательlast
, указательptr
и целочисленные переменныеi
,count
,len
иflag
- Считываем строку с помощью
fgets
- Проходим по каждому символу строки
- Если текущий символ не пробел и не символ новой строки, увеличиваем счетчик длины слова
- Если текущий символ - пробел или символ новой строки, проверяем, является ли предыдущий символ пробелом
- Если предыдущий символ - пробел, начинаем проверку слова на одинаковость символов с начала и конца
- Если все символы слова одинаковые, выводим слово на экран и увеличиваем счетчик слов
- После проверки слова, сбрасываем счетчик длины слова и проходим по символам слова слева направо, выводя их на экран
- После прохождения всего ввода, выводим общее количество слов
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д