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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Интерестная сортировочка массива! http://www.cyberforum.ru/cpp-beginners/thread63351.html
Постановка задачи: дан массив A, отсортировать столбцы по неубыванию последних элементов столбцов. вот вообщемто что я сделал: #include <conio.h> #include <iomanip.h> #include <iostream.h> void main() {
C++ действительные числа. Помогите пожалуйста решить такое задание, или хотя бы натолкните на решение: Необходимо проверить, является ли данный рядок правильно записанным действительным числом, возможно у научной форме записи, например +1, 376400E − 18. Найти это число. http://www.cyberforum.ru/cpp-beginners/thread63344.html
Разработка и отладка алгоритмов и программ с использованием указателей. C++
Две обьёмные задачи , прошу помощи товарисчи , кому несложно решите за меня плз ..заранее примного благодарен . 1.В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) минимальный элемент массива; 2) сумму элементов массива, расположенных между первым и последним положительными элементами. Преобразовать массив таким образом, чтобы сначала располагались все элементы...
никто не может помочь? C++
если нет сильных програмистов дайте хотя бы совет кто нибуть: как построить ламаную в центре? когда прямая отходит просто от фигуры...либо отсек иной фигуры для сложения. http://www.cyberforum.ru/cpp-beginners/thread62796.html
C++ Смещение элементов одномерного массива http://www.cyberforum.ru/cpp-beginners/thread63331.html
Осуществить сжатие массива А(30), удалив из него все положительные элементы.
C++ Рекурентное соотношение http://pic.ipicture.ru/uploads/091112/38SfPo9FRI.png Даже не знаю что и сказать нужен по зарез программный код. Пробовал первый сделать сам но получается полный бред прошу помогите. Добавлено через 30 минут Кстати этот корень не распространяется после точки с запятой подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
17.11.2009, 09:21     Статистика встречаемости символов в файле
Вот моя реализация на С, исходный текст и результат работы приложил в 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;
}
Миниатюры
Статистика встречаемости символов в файле  
Вложения
Тип файла: txt text.txt (59 байт, 46 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru