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