Форум программистов, компьютерный форум CyberForum.ru

программа подсчитывающая число повторения в тексте - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
vds555
1 / 1 / 1
Регистрация: 24.10.2011
Сообщений: 26
01.05.2012, 14:29     программа подсчитывающая число повторения в тексте #1
Доброго времени суток!
Уважаемые участники форума, возникла следующая проблема: к данной задаче создать файл
не получается из-за использования в ней функции, не компилируется , любой помощи буду благодарен

Задача:Одним из способов идентификации автора литературного произведения – подсчет частоты вхождения отдельных слов. В заданном тексте найти 20 наиболее часто встречающихся слов с указанием количества использования каждого из них.
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
#include <stdio.h>
#include <string.h>
 
#define MAX_WORDS 100
#define DELIM " \t\n,.:;!?"
 
int split(char* str, char** tok);
int unique(char** arr, int size);
 
int main()
{
    const char text[] = "is This is my test text text. This text about split This split. Split is cool is is";
    char buf[255];
    strcpy(buf, text);
 
    char* unique_token[MAX_WORDS];
    int words = split(buf, unique_token);
    int i = 0, 
        new_size = unique(unique_token, words);
 
    strcpy(buf, text);
    char* token[MAX_WORDS];
    split(buf, token);
    for (; i < new_size; ++i)
    {
        int j = 0, count = 0;
        for (; j < words; ++j)
        {
            if (!strcmp(token[j], unique_token[i]))
                ++count;
        }
        printf("%s\t-\t%d\n", unique_token[i], count);
    }
 
    getchar();
    return 0;
}
 
int split(char* str, char** token)
{
    int tokens = 0;
    char* ptr = strtok(str, DELIM);
    for (; ptr != NULL; ptr = strtok(NULL, DELIM), ++tokens)
    {
        token[tokens] = ptr;
    }
    return tokens;
}
 
int unique(char** arr, int size)
{
    int i, j;
    for (i = 0; i < size; ++i)
    {
        for (j = 0; j < size; ++j)
        {
            if (i != j && !strcmp(arr[i], arr[j]))
            {
                int t = j;
                --size;
                for (; t < size; ++t)
                {
                    arr[t] = arr[t + 1];
                }
                arr[++t] = NULL;
            }
        }
    }
    return ++size;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 14:29     программа подсчитывающая число повторения в тексте
Посмотрите здесь:

C++ Как подсчитать повторения символов в тексте?
C++ Разработать программу для определения процента повторения заданного слова в тексте
C++ Программа, подсчитывающая частоту повторения слов в тексте
C++ Программа подсчитывающая количество повторов цифр в числе.
C++ функция, подсчитывающая, сколько раз в тексте встречается сочетание
C++ Частота повторения букв в тексте
Программа, находящая папку по её полному "пути" и подсчитывающая количество файлов в ней C++
Функция подсчитывающая число вхождений в строку заданного символа C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
01.05.2012, 21:09     программа подсчитывающая число повторения в тексте #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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
 
#include <iostream>
#include <fstream>
 
typedef struct words
{
    char* word;
    int count;
} WORDS;
 
using namespace std;
 
int main(void)
{
    static char text[256] = "\0";
    const char* filename = "d:\\input.txt";
    ifstream ifs(filename, ifstream::in);
    ifs.getline(text,256);
 
    int count = 0;
    for (int i = 0; text[i] != '\0'; i++)
        if ((isspace(text[i]) && isalpha(text[i-1])) 
            || i == strlen(text)-1) count++;
        
    WORDS* words = new WORDS[count]; int k = 0;
    for (char* word = strtok(text," "); 
        word != NULL; word = strtok(NULL," "))
    {
        words[k].count = 0;
        words[k].word = new char[256];
        strcpy(words[k++].word, word);
    }
 
    bool wfound = false;
    for (int q = 0; q < k; q++)
    {
        for (int p = q; p < k && words[p].count >= 0; p++)
            if (!strcmp(words[q].word, words[p].word))
                words[q].count++;
        do { 
            wfound = false;
            for (int m = q+1; m < k && words[m].count >= 0; m++)
                if (!strcmp(words[m].word, words[q].word))
                {
                    wfound = true;
                    for (int n = m; n < k; n++)
                        words[n] = words[n+1];
                    break;
                }
        } while(wfound);
    }
 
    for (int z1 = 0; words[z1].count >= 0; z1++)
        for (int z2 = z1+1; words[z2].count >= 0; z2++)
            if (words[z2].count > words[z1].count)
            {
                WORDS wdtemp = words[z2];
                words[z2] = words[z1];
                words[z1] = wdtemp;
            }
 
    for (int h = 0; words[h].count >= 0 && h < 3; h++)
        cout << words[h].word << " " << words[h].count << endl;
 
    _getch();
 
    return 0;
}
Yandex
Объявления
01.05.2012, 21:09     программа подсчитывающая число повторения в тексте
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru