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

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

Восстановить пароль Регистрация
 
Призрак286397
Сообщений: n/a
15.06.2010, 15:54     Недопонимание с кодировкой #1
И так задание:
Выходной файл представляет собой 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2010, 15:54     Недопонимание с кодировкой
Посмотрите здесь:

неприятности с кодировкой! C++
C++ Непонятка с кодировкой
C++ Недопонимание указателей
C++ Проблемы с кодировкой при выводе данных
Проблемы с кодировкой C++
C++ Проблемы с кодировкой символов
C++ Недопонимание кода
Недопонимание с switch и выводом default C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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