Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
bod1ka
0 / 0 / 0
Регистрация: 08.11.2009
Сообщений: 29
1

Вывести слова этого же текста, множества символов которых являются подмножествами множества символов

17.06.2010, 14:39. Просмотров 1091. Ответов 2
Метки нет (Все метки)

Для каждого слова w данного текста вывести слова этого же текста, множества символов которых являются подмножествами множества символов слова w.

Сделал таким образом:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#define MAXWORDS 5000 /* максимальное количество слов в тексте */
#define MAXLEN  1000/* максимальная длина входного слова */
 
/* strcpy: копирует строку t в s */
void strcpy (char *s, char *t)
{
    while (*s++ = *t++)
        ;
}
 
/* strlen: возвращает длину строки s */
int strlen (char *s)
{
    int i = 0;
 
    while (s[i] != '\0')
        ++i;
    return i;
}
 
char *get_word (int n, char *c)
{
    char s[n], *p;
    int i = 0;
 
    if (*c == '\n'){
        p = NULL;
        return p;
    }
    while (*c == ' ')
        *c = getchar();
    while (*c != ' ' && i < n && *c != '\n'){
        s[i++] = *c;
        *c = getchar();
    }
    s[i++] = '\0';
    if (i > n  || (p = (char *) malloc(i)) == NULL)
        p = NULL;
    else strcpy (p, s);
    return p;
}
 
void poisk (char *pmass[], int n)
{
    int i, j, k, l, f;
 
    for (i = 0; i < n; ++i){
        printf ("For %s:\n", pmass[i]);
        for (j = 0; j < n; ++j){
            if (i == j && i!=n-1)
                j++;
            else if (i = n - 1 && i == j)
                    return;
            k = 0;
            f = 1;
            while (pmass[j][k] != '\0' && f == 1){
                f = 0;
                l = 0;
                while (pmass[i][l] != '\0' && f == 0){
                    if (pmass[j][k] == pmass[i][l]) 
                        f = 1;
                        else l++;
                }
                k++;
            }
            if (f == 1)
                printf ("%s\n",pmass[j]);
        }
    }
    return;
}
 
int main()
{
    char *free_mass[MAXWORDS], *p, c;
    int nword = 0, i;
 
    printf ("Vvedite text\n");
    c = getchar();
    p = get_word (MAXLEN, &c);
    while (p != NULL){
        if (nword < MAXWORDS + 1){
        free_mass[nword++] = p;
        p = get_word (MAXLEN, &c);
        } else {
            printf ("error\n");
            return 0;
        }
    }
    poisk (free_mass, nword);
    for (i = 0; i < nword; ++i)
        free (free_mass[i]);
    getchar();
    return 0;
}
Что нужно изменить в программе если вместо *free_mass[MAXWORDS] сделать **free_mass?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2010, 14:39
Ответы с готовыми решениями:

Свободные массивы строк Из данного текста удалить слова, множества символов которых равны
Из данного текста удалить слова, множества символов которых равны.

Дан текст. Исключить из текста слова, длина которых короче 5 символов
У нас есть файл с заданным текстом и второй пустой файл. Я пытался решить, но прога дальше, чем с...

Вывести на экран только те слова, в которых нет никаких символов, кроме 'C', 'F', 'U' и 'K'
пользователь вводит текст. вывести на экран только те слова в которых нет никаких символов кроме...

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

Определить, есть ли в данной строке слова, множества символов которых равны
Проблема в том, что в pascal abc.net все отлично компилируется и выводит, но когда я компилю во...

2
easybudda
Модератор
Эксперт CЭксперт С++
10261 / 6149 / 1547
Регистрация: 25.07.2009
Сообщений: 11,703
17.06.2010, 17:09 2
bod1ka, вот Вам работающая програмка на С
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SEP " ,.;:\t\n"
 
typedef struct WRD {
    struct WRD * next;
    char * word;
} wrd_t;
 
wrd_t * new_word(const char * s, wrd_t * last){
    wrd_t * w;
    if ( ( w = (wrd_t*)malloc(sizeof(wrd_t)) ) == NULL )
        return NULL;
    if ( ( w->word = strdup(s) ) == NULL ){
        free(w);
        return NULL;
    }
    w->next = NULL;
    if ( last )
        last->next = w;
    return w;
}
 
void delete_words(wrd_t * w){
    wrd_t * t;
    while ( w ){
        t = w->next;
        free(w->word);
        free(w);
        w = t;
    }
}
 
/* возвращает 0 если все буквы из слова b есть в слове a */
int check_word(const char * a, const char * b){
    while ( *b  && strchr(a, *b) )
        ++b;
    return *b;
}
 
int main(void){
    char buf[BUFSIZ], * p;
    wrd_t * first, * last, * i, *j;
 
    printf("String: ");
    if ( ! fgets(buf, BUFSIZ, stdin) || *buf == '\n' ){
        fprintf(stderr, "Wrong or empty string!\n");
        exit(EXIT_FAILURE);
    }
 
    first = last = NULL;
    for ( p = strtok(buf, SEP); p; p = strtok(NULL, SEP) ){
        if ( ( last = new_word(p, last) ) == NULL ){
            fprintf(stderr, "Memory error!");
            if ( first )
                delete_words(first);
            exit(EXIT_FAILURE);
        }
        if ( ! first )
            first = last;
    }
 
    if ( ! first ){
        fprintf(stderr, "Shit happens!\n");
        exit(EXIT_FAILURE);
    }
 
    for ( i = first; i != NULL; i = i->next ){
        printf("\n%s\n", i->word);
        for ( j = first; j != NULL; j = j->next ){
            if ( j == i )
                continue;
            if ( ! check_word(i->word, j->word) )
                printf("\t%s\n", j->word);
        }
    }
 
    delete_words(first);
    exit(EXIT_SUCCESS);
}
0
bod1ka
0 / 0 / 0
Регистрация: 08.11.2009
Сообщений: 29
17.06.2010, 17:31  [ТС] 3
Структуры и string.h использовать нельзя :/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2010, 17:31

Определить, есть ли в данной строке слова, множества символов которых равны
мне надо заменить функции length(нельзя использвать подпрограммы стандартной библиотеки, надо...

Вывести слова текста, которые отличны от последнего слова и количество символов в которых не более четырех
Дан текст, содержащий от 2 до 50 слов, в каждом из которых от 1 до 7 строчных латинских букв;...

Множества. Из множества латинских букв выделить множество символов, не входящих в ваше имя
из множества латинских букв выделить множество состоящее из символов не входящих в множество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru