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

Статистика встречаемости символов в файле - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Смещение элементов одномерного массива http://www.cyberforum.ru/cpp-beginners/thread63331.html
Осуществить сжатие массива А(30), удалив из него все положительные элементы.
C++ Структуры,работа с файлом ув программисты,вот меня заинтересовала работата со структурами,пожалуйста,приведите мне пример проги.Можно так: существует файл в нем записи типа: адресс: номер: зарплата: надо ввести на экран,и вывести в файл данные помогите буду рад ответам http://www.cyberforum.ru/cpp-beginners/thread63005.html
нужно написать программу! C++
программу нужно на с++ В файле заданы координаты концов отрезков. Вывести их на экран. Отдельным цветом выделить три пары отрезков, которые пересекаются и имеют наибольшую суммарную длину. Формат записи данных в файле: Vidrizok1: x1=22; y1=130; x2=340; y2=14; Vidrizok2: x1=45; y1=39; x2=17; y2=200.
C++ Исправьте ошибки!
Перемножение двух матриц. Мой код:#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> void proizv (int **mas1,int **mas2,int x1,int y1,int y2) { int **mas3; int i,j,k;
C++ MainThread http://www.cyberforum.ru/cpp-beginners/thread62835.html
Обьясните дураку пытаюсь втыкнуть каким макаром строчка MainThread; заменяет весь WinMain?
C++ Как работать с битами? Подскажите, пожалуйста... please... У меня дано число типа WORD. Как мне просмотреть первый и последующие биты в этом числе? И если возможность их изменения? Намного благодарен! подробнее

Показать сообщение отдельно
m@shka
 Аватар для m@shka
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 12
17.11.2009, 19:12  [ТС]     Статистика встречаемости символов в файле
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот моя реализация на С, исходный текст и результат работы приложил в text.txt
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
//Подсчитывает количество символов chr в строке str
int GetChrNum(char * str, char chr);
//Удаляет из строки str все символы chr, если они содержится в ней
//Возвращаемый результат - указатель на преобразованную строку str 
char * StrRemChr(char * str, char chr);
 
void main()
{
    FILE * f;
    //При успешном открытии файла строка будет содержать
    //текст содержащиеся в нём
    char * str = (char *)malloc(sizeof(char));
    //Массив символов, встречающихся в файле
    char * chMass = (char *)malloc(sizeof(char));
    //Массив содержит количество символов для каждого элемента chMass
    //которые включает в себя текстовый блок str
    int * chNum = (int *)malloc(sizeof(int));
    if((f = fopen("text.txt","rb")))
    {
        fseek(f,0,SEEK_END);
        int sLen = ftell(f);
        fseek(f,0,SEEK_SET);
        str = (char *)realloc(str,sizeof(char)*sLen);
        fread(str,1,sLen,f);
        fclose(f);
        //При динамическом выделении вконце строки идёт мусор
        //Обрезаем строку до её действительной длинны
        str[sLen] = '\0';
        int i = 0;
        while(str[0] != '\0')
        {
            chMass[i] = str[0];
            chNum[i] = GetChrNum(str, chMass[i]);
            str = StrRemChr(str, chMass[i]);
            if(str[0] != '\0')
                i++;
            chMass = (char *)realloc((void *)chMass,sizeof(char)*(i + 1));
            chNum  = (int *)realloc((void *)chNum,sizeof(int)*(i + 1));
        }
        printf("Total count of chars in text     : %d\r\n",sLen);
        printf("Amount of different chars in text: %d\r\n",i);
        printf("\tChar\t|\tcount in text\r\n");
        while(0 <= i)
        {
            printf("\t'%c'\t|\t\t%d\r\n",chMass[i],chNum[i]);
            i--;
        }
    }
    else
        printf("text.txt is already open or not exist!");
    printf("Program stopped by getch(), for analize other text block\r\n");
    printf("enter new text in text.txt and restart program, now it will be closed\r\n");
    getch();
    free(chNum);
    free(chMass);
    //Строка str вконце анализа будет иметь 0-ую длинну,
    //(т.к. последовательно исключали ииз неё символы),
    //память под неё чистить не нужно...
//  free(str);
}
 
int GetChrNum(char * str, char chr)
{
    int chNum = 0;
    if(str)
    {
        char * chBuf = strchr(str,chr);
        while(chBuf)
        {
            chNum++;
            chBuf = strchr(chBuf + 1,chr);
        }
    }
    return chNum;
}
 
char * StrRemChr(char * str, char chr)
{
    if(str)
    {
        int i = 0,j,sLen = strlen(str);
        while(strchr(str,chr))
        {
            if(str[i] == chr)
            {
                j = i;
                while(str[i] == chr && i < sLen)
                    i++;
                //Осуществляем сдвиг в строке на sLen - i
                memmove((void *)&str[j],(void *)&str[i],sLen - i);
                //Обрезаем строку, т.к начиная с позиции
                //j + strlen((void *)&str[i]) будет идти sLen - i 
                //уже передвинутых внутри str символов
                str[j + strlen(&str[i])] = '\0';
                //Вычисляем новую длину строки
                sLen = strlen(str);
                i = j;
            }
            i++;
        }
    }
    return str;
}
УУУУ.... эт на С...
такое ощущение, что на другом языке....
мне на С++
иль то у меня мозГ не работает....

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