Дана последовательность,содержащая от 1 до 30 слов. Вывести эту же последовательность, удалив из нее повторные вхождения - C (СИ)

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

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

Дана последовательность,содержащая от 1 до 30 слов,в каждом из которых от 1 до 5 строчных латинских букв; Между соседними словами-запятая,за последним словом-точка.Вывести эту же последовательность слов,но удалив из нее повторные вхождения.

Решение задачи: «Дана последовательность,содержащая от 1 до 30 слов. Вывести эту же последовательность, удалив из нее повторные вхождения»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define MAX_STRINGS 30
#define MAX_LENGTH 5
 
const char* word_delimiters = ",";
 
char words[MAX_STRINGS][MAX_LENGTH + 1];
 
void truncate_after_period(char* str)
{
    while( *str && *str != '.' ) {
        ++str;
    }
    *str = '\0';
}
 
int fill_words(char* str)
{
    int i;
 
    for( i = 0; i < MAX_STRINGS; ++i ) {
        words[i][0] = '\0';
    }
 
    char* w = strtok(str, word_delimiters);
 
    for( i = 0; i < MAX_STRINGS; ++i ) {
        if( !w ) break;
        strncpy(words[i], w, MAX_LENGTH);
        words[i][MAX_LENGTH] = '\0';
        w = strtok(NULL, word_delimiters);
    }
 
    return i;
}
 
void remove_duplicates(int n_words)
{
    for( int i = 0; i < n_words; ++i ) {
        for( int j = i + 1; j < n_words; ++j ) {
            if( strcmp(words[i], words[j]) == 0 ) {
                words[i][0] = '\0';
                break;
            }
        }
    }
}
 
int main(void)
{
    char string[] = "anchor,beach,beach,corsar,digit,anchor.trash";
 
    truncate_after_period(string);
    int n_words = fill_words(string);
    remove_duplicates(n_words);
 
    for( int i = 0; i < n_words; ++i ) {
        if( words[i][0] ) {
            puts(words[i]);
        }
    }
 
    return 0;
}

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

В этом коде реализована функция, которая удаляет дубликаты из последовательности слов, представленных в виде строки. Список действий:

  1. В функции main создается строка string, содержащая последовательность слов, разделенных запятыми.
  2. Строка string передается в функцию truncate_after_period, которая удаляет все символы после последней точки в строке.
  3. Строка string затем передается в функцию fill_words, которая разбивает строку на отдельные слова и сохраняет их в массиве words.
  4. В основной функции main вызывается функция remove_duplicates, которая проходит по всем словам в массиве words и удаляет дубликаты, устанавливая значение первого символа каждого дубликата в ноль, что приводит к его игнорированию при выводе.
  5. Затем все слова в массиве words, которые не являются дубликатами, выводятся на экран с помощью функции puts.
  6. В конце функции main возвращается значение 0, что означает успешное выполнение программы.

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


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

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

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