Распечатать самое длинное слово текста, в котором все буквы разные - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите реализовать Задачу:

С клавиатуры вводится многострочный текст. Распечатать самое длинное слово, в котором все буквы разные.

Выручайте)

Решение задачи: «Распечатать самое длинное слово текста, в котором все буквы разные»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define DELIM " ,.\t\n"
 
int unique_letters(const char* s) {
    return ( ! *s ) ? 1 : strchr(s + 1, *s) ? 0 : unique_letters(s + 1);
}
 
int main(void) {
    char text[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor "
        "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis "
        "nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. "
        "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu "
        "fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in "
        "culpa qui officia deserunt mollit anim id est laborum.";
    char* ptr;
    const char* longestUnique = "";
    
    for ( ptr = strtok(text, DELIM); ptr; ptr = strtok(NULL, DELIM) )
        if ( unique_letters(ptr) && strlen(ptr) > strlen(longestUnique) )
            longestUnique = ptr;
    
    printf("%s\n", ( *longestUnique ) ? longestUnique : "No suitable words found.");
    
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и строками
  2. Определяем строку-разделитель, которая будет использоваться для разделения слов в тексте
  3. Создаем функцию unique_letters, которая принимает на вход указатель на строку и возвращает 1, если текущий символ является уникальным, и 0 в противном случае (рекурсивный вызов функции)
  4. Создаем массив text с текстом, который необходимо проанализировать
  5. Создаем указатель ptr, который будет использоваться для перебора слов в тексте
  6. Создаем переменную longestUnique, которая будет хранить самое длинное уникальное слово
  7. Используем цикл for для перебора слов в тексте с помощью функции strtok и разделителя DELIM
  8. Внутри цикла проверяем, является ли текущее слово уникальным с помощью функции unique_letters и сравниваем его длину с длиной самого длинного уникального слова
  9. Если текущее слово уникально и его длина больше длины самого длинного уникального слова, то обновляем значение переменной longestUnique
  10. После завершения цикла выводим на экран самое длинное уникальное слово или сообщение об отсутствии подходящих слов
  11. Завершаем программу с помощью функции return

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

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