Найти самое длинное симметричное слово в предложении - 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;
}

Объяснение кода листинга программы

  1. В функции is_palindrome используется два указателя: wrd и tail. Первый указывает на начало слова, а второй на его конец.
  2. Пока wrd меньше tail выполняется условие, если символы, на которые указывают wrd и tail не равны, то функция возвращает 0, иначе продолжает цикл.
  3. Если в цикле не было возврата функции, то слово считается симметричным и функция возвращает 1.
  4. В функции main используется массив buf для считывания строки из стандартного ввода.
  5. Пока пользователь вводит строку и она не пустая, выполняется цикл, который разбивает строку на слова и проверяет каждое слово на симметричность с помощью функции is_palindrome.
  6. Если слово является симметричным и оно длиннее самого длинного найденного ранее слова, то оно становится новым самым длинным словом.
  7. Если в цикле не было найдено ни одного симметричного слова, выводится сообщение об этом.
  8. В конце программы выводится сообщение о успешном завершении работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы