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

Напечатать все различные слова и для каждого слова указать количество повторений

21.03.2013, 18:07. Просмотров 1103. Ответов 1
Метки нет (Все метки)

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

Помогите, пожалуйста, переделать программу, чтобы выводить два наиболее часто встречающихся слова(указав число повторений)
Вот программа первой задачи
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale>
 
int main() 
{
   setlocale(LC_ALL, "Russian");
   char c[256];
   char *a[256];
   char *ch=" .,?!:;-";
   int i,j,k,s,p[255],h,d,f;
   do{
    do 
    {
        do
        {
            printf("\nВведите текст:\n");
            gets(c);
            strlwr(c);
        }
        while(c[0]==NULL);
        a[0]=strtok(c,ch);
    }
    while (a[0]==NULL);
       
       
            i=1;
            h=0;
    for (i=1; a[i]=strtok(NULL,ch);i++);
            for(j=0; j<i; j++)
            {
         s=0;
                 f=0;
 //число повторений каждого слова
                    for(k=0; k<i; k++) 
            {
                     if (strcmp(a[j], a[k]) == 0)   s++; 
                      
                 }
            
        
 
//флаг 
        for(d=0; d<h; d++) 
                { 
                      if (strcmp(a[j], a[d]) == 0)   f++;  
                 }
//кол-во разных слов
           
        if(s > 0 && f == 0)     
                {
            a[h]=a[j];
                    p[h]=s;
                            h++;
                }
            }
   
         for(j=0; j<h; j++) 
            {
        printf("\nСлово: %s",a[j]);
            printf("\nПовторений: %i",p[j]);
                        printf("\n");
         }
   
        printf("\n");
        printf("\Нажмите любую клавишу для продолжения, Esc - выход.\n");
        fflush(stdin);
   }
   
   while(getch()!=27); 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2013, 18:07
Ответы с готовыми решениями:

Найти все различные слова, указав для каждого из них число его вхождений в последовательность
Здравствуйте, я новичок. Как решить эту задачу без использования подпрограмм? Дана непустая...

Дано предложение. Нужно напечатать все его различные слова. Предварительно удалить все знаки препинания
Возможно ли это сделать на базовом уровне, понятном для понимания школьнику

Найти в текстовом файле одинаковые слова и вывести количество повторений каждого в другой файл
Найти в текстовом файле одинаковые слова и вывести количество повторений каждого в другой файл....

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

1
Модератор
Эксперт JavaЭксперт CЭксперт С++
10796 / 6538 / 1611
Регистрация: 25.07.2009
Сообщений: 12,314
21.03.2013, 18:55 2
Из серии "Мы простых путей не ищем!"
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
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct WRD {
    const char * text;
    size_t count;
} wrd_t;
 
typedef struct NODE {
    wrd_t word;
    struct NODE * next;
} node_t;
 
int push_word(node_t ** pList, const char * w) {
    if ( ! *pList ) {
        if ( ! ( *pList = malloc(sizeof(node_t)) ) )
            return -1;
        
        (*pList)->word.text = w;
        (*pList)->word.count = 1;
        (*pList)->next = NULL;
        
        return 0;
    }
    else if ( strcmp((*pList)->word.text, w) == 0 ) {
        (*pList)->word.count += 1;
        return 0;
    }
    else
        return push_word(&((*pList)->next), w);
}
 
void freelist(node_t * list) {
    while ( list ) {
        node_t * next = list->next;
        free(list);
        list = next;
    }
}
 
void swap_words(node_t * a, node_t * b) {
    wrd_t tmp = a->word;
    a->word = b->word;
    b->word = tmp;
}
 
node_t * max_count(node_t * list) {
    node_t * pMax = list;
    
    while ( list->next ) {
        list = list->next;
        if ( pMax->word.count < list->word.count )
            pMax = list;
    }
    
    return pMax;
}
 
void sort_by_count_descendant(node_t * list) {
    for ( ; list; list = list->next ) {
        node_t * m = max_count(list);
        if ( m != list )
            swap_words(list, m);
    }
}
 
#define DELIM " \t\n"
#define WORDS_TO_OUT (2)
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        node_t * list = NULL, * curWordPtr = NULL;
        int curWordNumber = 0;
        char * pWord = strtok(buf, DELIM);
        
        while ( pWord ) {
            if ( push_word(&list, pWord) ) {
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
            pWord = strtok(NULL, DELIM);
        }
        
        if ( ! list ) {
            fprintf(stderr, "Empty string!\n");
            continue;
        }
        
        sort_by_count_descendant(list);
        curWordPtr = list;
        printf("%u frequently meeting words:\n", WORDS_TO_OUT);
        while ( curWordNumber < WORDS_TO_OUT ) {
            if ( curWordPtr )
                printf("%s (%u)\n", curWordPtr->word.text, curWordPtr->word.count);
            else
                break;
            ++curWordNumber;
            curWordPtr = curWordPtr->next;
        }
        
        freelist(list);
    }
    
    exit(0);
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2013, 18:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Для каждого слова текста указать, сколько раз слово встречается в тексте
Помогите написать программу, для каждого слова текста указать сколько раз слово встречается в...

Как указать количество повторений каждого числа в последовательности?
Подскажите, как указать количество повторений каждого числа в последовательности? Задача С...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них
Здравствуйте. Помогите пожалуйста написать прогу. Требуется написать функцию обработки строки и...

Напечатать все слова последовательности, отличные от последнего слова, предварительно преобразовав по правилу
последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных русских...


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

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

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