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