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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
vds555
1 / 1 / 1
Регистрация: 24.10.2011
Сообщений: 26
#1

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

01.05.2012, 14:29. Просмотров 1513. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 14:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос программа подсчитывающая число повторения в тексте (C++):

Программа, подсчитывающая частоту повторения слов в тексте - C++
Разработать программу, подсчитывающую частоту повторения в тексте слов и печатающую слова в порядке уменьшения их частоты. Распечатать...

функция, подсчитывающая, сколько раз в тексте встречается сочетание - C++
Написать функцию, которая подсчитывает, сколько раз в тексте встречается сочетание, введенное с клавиатуры. Создайте класс в соответствии...

Частота повторения букв в тексте - C++
Доброго дня. Помогите пожалуйста разобраться. Простенькая программка по подсчеты количества букв в тексте в процентах на русском языке. До...

Как подсчитать повторения символов в тексте? - C++
как подсчитать в введенном с клавы или с файла тексте ,количество повторяющихся символов? короче дан текст ,ниже нужно вывести сколько...

Функция подсчитывающая число вхождений заданного элемента - C++
В составе программы описать функцию, которая подсчитывает число вхождений элемента Е, значение которого введено с клавиатуры, в списке Q.

Программа подсчитывающая количество повторов цифр в числе. - C++
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, с написанием программы. Задача в следующем: нужно ввести число с клавиатуры и...

1
zitxbit
88 / 740 / 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;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 21:09
Привет! Вот еще темы с ответами:

Определить процент повторения заданного слова в тексте - C++
разработать алгоритм и программу для опредиления процента повторения заданого слова в тексте(как разделители слов можно использовать...

Функция подсчитывающая число вхождений в строку заданного символа - C++
Написать функцию, обеспечивающую ввод с клавиатуры строки неограниченной длины без редактирования. Написать функцию, которая получает...

Разработать программу для определения процента повторения заданного слова в тексте - C++
люди помогите решить ! Завтра экзамен надо сдать лабу. Вот задача Разработать программу для определения процента повторения заданного...

Программа, находящая папку по её полному "пути" и подсчитывающая количество файлов в ней - C++
Здравствуйте, вот код программы, а ошибка состоит в том, что программа не ищет папки или файлы по заданному пути, вместо этого она ищет...


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

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

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