Дано предложение. Нужно напечатать все его различные слова. Предварительно удалить все знаки препинания - C (СИ)

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

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

Возможно ли это сделать на базовом уровне, понятном для понимания школьнику

Решение задачи: «Дано предложение. Нужно напечатать все его различные слова. Предварительно удалить все знаки препинания»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct SETNODE {
  6.     const char * wrd;
  7.     struct SETNODE * next;
  8. } setnode_t, * set_t;
  9.  
  10. setnode_t * setnode_new(const char * w) {
  11.     setnode_t * n = malloc(sizeof(setnode_t));
  12.    
  13.     if ( ! n )
  14.         return NULL;
  15.    
  16.     n->wrd = w;
  17.     n->next = NULL;
  18.    
  19.     return n;
  20. }
  21.  
  22. void setnode_free(setnode_t * n) {
  23.     free(n);
  24. }
  25.  
  26. int set_append(set_t * s, const char * w) {
  27.     while ( *s && strcmp((*s)->wrd, w) )
  28.         s = &((*s)->next);
  29.    
  30.     if ( ! *s ) {
  31.         setnode_t * n = setnode_new(w);
  32.         if ( ! n )
  33.             return -1;
  34.         *s = n;
  35.     }
  36.    
  37.     return 0;
  38. }
  39.  
  40. void set_dump(set_t s) {
  41.     while ( s ) {
  42.         printf("%s\n", s->wrd);
  43.         s = s->next;
  44.     }
  45. }
  46.  
  47. void set_free(set_t * s) {
  48.     if ( *s ) {
  49.         set_free(&((*s)->next));
  50.         setnode_free(*s);
  51.         *s = NULL;
  52.     }
  53. }
  54.  
  55. #define DELIM " ,.!?-\t\n"
  56.  
  57. int main(void) {
  58.     char buf[BUFSIZ];
  59.    
  60.     while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
  61.         set_t set = NULL;
  62.         char * ptr;
  63.        
  64.         for ( ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) ) {
  65.             if ( set_append(&set, ptr) ) {
  66.                 fprintf(stderr, "Memory error!\n");
  67.                 exit(1);
  68.             }
  69.         }
  70.        
  71.         if ( ! set )
  72.             printf("Empty string.\n");
  73.         else {
  74.             printf("Unique words:\n");
  75.             set_dump(set);
  76.             printf("\n");
  77.             set_free(&set);
  78.         }
  79.     }
  80.    
  81.     return 0;
  82. }

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


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

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы