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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct SETNODE {
    const char * wrd;
    struct SETNODE * next;
} setnode_t, * set_t;
 
setnode_t * setnode_new(const char * w) {
    setnode_t * n = malloc(sizeof(setnode_t));
    
    if ( ! n )
        return NULL;
    
    n->wrd = w;
    n->next = NULL;
    
    return n;
}
 
void setnode_free(setnode_t * n) {
    free(n);
}
 
int set_append(set_t * s, const char * w) {
    while ( *s && strcmp((*s)->wrd, w) )
        s = &((*s)->next);
    
    if ( ! *s ) {
        setnode_t * n = setnode_new(w);
        if ( ! n )
            return -1;
        *s = n;
    }
    
    return 0;
}
 
void set_dump(set_t s) {
    while ( s ) {
        printf("%s\n", s->wrd);
        s = s->next;
    }
}
 
void set_free(set_t * s) {
    if ( *s ) {
        set_free(&((*s)->next));
        setnode_free(*s);
        *s = NULL;
    }
}
 
#define DELIM " ,.!?-\t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        set_t set = NULL;
        char * ptr;
        
        for ( ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) ) {
            if ( set_append(&set, ptr) ) {
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
        }
        
        if ( ! set )
            printf("Empty string.\n");
        else {
            printf("Unique words:\n");
            set_dump(set);
            printf("\n");
            set_free(&set);
        }
    }
    
    return 0;
}

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


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

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

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