Задача на определение количества слов, которые слева и справа читаются одинаково - 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
- Проходим по каждому символу строки
- Если текущий символ не пробел и не символ новой строки, увеличиваем счетчик длины слова
- Если текущий символ - пробел или символ новой строки, проверяем, является ли предыдущий символ пробелом
- Если предыдущий символ - пробел, начинаем проверку слова на одинаковость символов с начала и конца
- Если все символы слова одинаковые, выводим слово на экран и увеличиваем счетчик слов
- После проверки слова, сбрасываем счетчик длины слова и проходим по символам слова слева направо, выводя их на экран
- После прохождения всего ввода, выводим общее количество слов
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д