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

Недопонимание с кодировкой - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамический массив http://www.cyberforum.ru/cpp-beginners/thread145736.html
Надо: Сформировать массив строк, добавить в него строку с заданным номером. Не знаю,как добавить в него строку с заданным номером. Может кто сможет помочь?
C++ Массив из литер Нужно написать прогу которая будет считывать данные из файла, в котором содержатся числа, и переносить эти числа в массив. Массив имеет размерность 10. http://www.cyberforum.ru/cpp-beginners/thread145725.html
блок-схемы для ООП C++
Доброго времени, Подскажите пожалуйста, как рисовать блок-схемы для программы с граф. интерфейсом (Qt, Visual и.д.) где почти все через классы, шаблоны и т.д. и т.п. Если я включаю её и у меня...
C++ Считать значения файла, найти их минимальное и максимальное значения
5. Дан файл File_in.dat, содержащий 65536 целых чисел. Считать значения файла, найти их минимальное и максимальное значения. Результат записать в файл File_out.dat. даже не представляю как...
C++ Сравнить 2 массива http://www.cyberforum.ru/cpp-beginners/thread145667.html
Есть 2 массива. один 15х13 другой 6х6. Нужно узнать содержится второй массив в первом. Не знаю как это делать с двухмерными массивами.
C++ Подсчитать во сколько раз русских букв больше чем английских Подскажите пожалуйста!как выглядит программа которая подсчитывает во сколько раз русских букв больше чем английских. подробнее

Показать сообщение отдельно
Призрак286397
Сообщений: n/a

Недопонимание с кодировкой - C++

15.06.2010, 15:54. Просмотров 375. Ответов 0
Метки (Все метки)

И так задание:
Выходной файл представляет собой HTML-документ, с требуемым по заданию табличным представлением данных, либо наличием ссылок на выделяемые фрагменты. Входной файл – обычный текстовый файл, полученный сохранением документа (doc) в тестовый файл (txt) (абзац документа – строка текста). При разработке системы адресации производится ставятся якоря (метки) либо на все абзацы, либо на сами выделенные фрагменты. Необходимая информация сохраняется в динамических структурах данных.
Программа подсчитывает частоты появления слов в тексте, слова считаются одинаковыми при совпадении первых 70% букв (% совпадения можно менять, синтаксис слов не учитывается). Формируется таблица из первых n наиболее часто встречающихся слов, в таблице содержится само слово и ссылки на все абзацы, где оно появляется.
-----------------------------------------------------------------------------------------------------------
а проблема в том что у меня текст не выводиться на русском, подскажите как это сделать!(пищу в Borlande c++)

Так программу я вроде написал:
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <locale.h>
#include <fstream.h>
#include <windows.h>
#include <malloc.h>
 
struct word {
    char* wd;
    int n, sz;
    int* abz;
void add(char c[],int na){
    wd=strdup(c);
    n=1, sz=10;
    abz = new int[10];
    abz[0]=na;
    }
void add(int na){
    abz[n++]=na;
    if (n!=sz) return;
    sz*=2;
    abz=(int*)realloc(abz,sz*sizeof(int));
    }
void put(){
    printf("%20s %d\n",wd,n);
    }
} *WD;
 
 
 
int n=0, sz;
int kk = 0;
 
//------- Сотрировка рекурсивным разделением массива
// В качестве медианы - среднее арифметическое
 void sort(word in[], int a, int b){
 int i,j,mode;
 double sr=0;
 if (a>=b) return;                      // Размер части =0
 for (i=a; i<=b; i++) sr+=in[i].n;
 sr=sr/(b-a+1);
 for (i=a, j=b; i <= j;)
    {
    if (in[i].n> sr) { i++; continue; } // Слева - меньше, пропустить
    if (in[j].n<=sr) { j--; continue; } // Справа - больше, пропустить
    word c = in[i]; in[i] = in[j]; in[j]=c;
    i++,j--;                            // Поменять местами и пропустить
    }
 if (i==a) return;                      // все равны и в правой части
 sort(in,a,j); sort(in,i,b);}           // рекурсивный вызов для двух частей
 
 
int getw(FILE *fd, char c[]){
    int i;
    if (kk == 1) { kk = 0; return 1;}
    while(1){
        c[0] = getc(fd);
        if (feof(fd)) return -1;
        if (c[0] == '\n') return 1;
        if (c[0] != ' ' && c[0] != '\t') break;
    }
    i = 0;
    do{i++; c[i] = getc(fd);}
    while(!feof(fd) && c[i] != '\n' && c[i] !=' ' && c[i] !='\t');
    if (c[i] == '\n') kk = 1;
 
    c[i] = 0;
    return 0;
    }
void readfilestr(char*name)//чтение текстового файла
{
    printf("Reading text file...\n");
    char*str=new char [81];
    FILE *in;
    if(!(in=fopen(name,"rt")))
    {
        printf("File open is failure...\n");
        return ;
    }
    fscanf(in,"%s",str);
    while(!feof(in))
    {
        printf("%s\n",str);
        fscanf(in,"%s",str);
    }
    fclose(in);
    }
void main()
{
    int MM=100;
    int i;
    setlocale(LC_ALL,"Russian");            // Установка преобразования при выводе
    sz=100;
    n=0;
    WD=new word[sz];
    FILE *fd=fopen("text2.txt","r");
    if (fd==NULL) return;
    char c[1000];
    int na=0;
    int k;
    int nn=0;
    while((k=getw(fd,c))!=-1){
        if (k==1) na++;
        else            // printf("%d %s\n",na,c);
        {
        nn++;
        if (nn%1000==0) printf("%d\n",nn);
        if (strlen(c)<=3) continue;
        for (i=0;i<n && strcmp(c,WD[i].wd);i++);
        if (i==n) {     // Не нашли
            WD[n].add(c,na);
            n++;
            if (n==sz) {sz*=2; WD=(word*)realloc(WD,sz*sizeof(word)); }
            }
        else WD[i].add(na);
        }
    }
    sort(WD,0,n-1);
     for (i=0;i<n;i++) WD[i].put();
    fclose(fd);
    fd=fopen("text2.txt","r");
    FILE *fdo=fopen("mmm.htm","w");
    fprintf(fdo,"<html><body><table border=1>\n");
    
    for (i=0;i<MM && i<n;i++){
        fprintf(fdo,"<tr><td>%s</td><td>%d</td><td>",WD[i].wd,WD[i].n);
        for (int j=0;j<WD[i].n;j++) fprintf(fdo,"<a href=\"#m%d\">%d</a> ",WD[i].abz[j],WD[i].abz[j]);
        fprintf(fdo,"</td></tr>\n",na);
    }
    fprintf(fdo,"</table>\n");
 
    na=0;
    fprintf(fdo,"<a name=\"m0\">\n");
    while((k=getw(fd,c))!=-1){
        if (k==1) {
            na++;
            fprintf(fdo,"<br><a name=\"m%d\">\n",na);
            }
        else fprintf(fdo,"%s ",c);
        }
    fprintf(fdo,"</body></html>\n");
    fclose(fd);
    fclose(fdo);
   getchar();
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru