Дана последовательность,содержащая от 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; }
Объяснение кода листинга программы
В этом коде реализована функция, которая удаляет дубликаты из последовательности слов, представленных в виде строки. Список действий:
- В функции
main
создается строкаstring
, содержащая последовательность слов, разделенных запятыми. - Строка
string
передается в функциюtruncate_after_period
, которая удаляет все символы после последней точки в строке. - Строка
string
затем передается в функциюfill_words
, которая разбивает строку на отдельные слова и сохраняет их в массивеwords
. - В основной функции
main
вызывается функцияremove_duplicates
, которая проходит по всем словам в массивеwords
и удаляет дубликаты, устанавливая значение первого символа каждого дубликата в ноль, что приводит к его игнорированию при выводе. - Затем все слова в массиве
words
, которые не являются дубликатами, выводятся на экран с помощью функцииputs
. - В конце функции
main
возвращается значение 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д