Найти самое длинное симметричное слово в предложении - C (СИ)
Формулировка задачи:
Необходимо найти самое длинное симметричное слово в предложении, с помощью указателей.
Код был ранее написан, но без применения указателей. Как реализовать с указателями? Помогите пожалуйста.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(null)
{
char *sl, slt[255], sla[255];
int i, f, len, la;
char st[]="tut budet predlojenie";
printf("Ishodnoe vyrazhenie:\n");
printf("%s\n", st);
sl = strtok(st," ");
la=0; //
while (sl != NULL)
{
f=1;
strcpy(slt,sl);
len = strlen(sl); // узнаем далину слова
for (i=0; i<( len >> 1 ); i++) { if (slt[i]==slt[len-1-i]) f*=1; else f*=0; }
if ((f==1) && (la<len)) // если
{
la=len;
strcpy(sla,slt);
}
sl = strtok(NULL," ");
}
printf("Otvet:\n");
if (la!=0) printf("%s\n", sla);
else printf("Net polindromov\n");
system("PAUSE");
return 0;
}Решение задачи: «Найти самое длинное симметричное слово в предложении»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int is_palindrome(const char * wrd) {
const char * tail = wrd + strlen(wrd) - 1;
while ( wrd < tail ) {
if ( *wrd != *tail )
return 0;
++wrd;
--tail;
}
return 1;
}
#define DELIM " \t\n"
int main(void) {
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
char * pWord, * pLongest;
for ( pLongest = NULL, pWord = strtok(buf, DELIM); pWord; pWord = strtok(NULL, DELIM) ) {
if ( is_palindrome(pWord) )
if ( ! pLongest || strlen(pLongest) < strlen(pWord) )
pLongest = pWord;
}
if ( pLongest )
printf("The first longest palindrome: %s\n", pLongest);
else
printf("Can't find any palindrome.\n");
}
return 0;
}
Объяснение кода листинга программы
- В функции
is_palindromeиспользуется два указателя:wrdиtail. Первый указывает на начало слова, а второй на его конец. - Пока
wrdменьшеtailвыполняется условие, если символы, на которые указываютwrdиtailне равны, то функция возвращает0, иначе продолжает цикл. - Если в цикле не было возврата функции, то слово считается симметричным и функция возвращает
1. - В функции
mainиспользуется массивbufдля считывания строки из стандартного ввода. - Пока пользователь вводит строку и она не пустая, выполняется цикл, который разбивает строку на слова и проверяет каждое слово на симметричность с помощью функции
is_palindrome. - Если слово является симметричным и оно длиннее самого длинного найденного ранее слова, то оно становится новым самым длинным словом.
- Если в цикле не было найдено ни одного симметричного слова, выводится сообщение об этом.
- В конце программы выводится сообщение о успешном завершении работы программы.