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

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

Войти
Регистрация
Восстановить пароль
 
Призрак286397
#1

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

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

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

Недопонимание кода - C++
Я разбираю некоторый код С++ (Сразу скажу, что учил с++ самостоятельно, не супер профи) и там есть некоторые строчки, которые я не до конца...

Будоражащее недопонимание цикла - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Data { public: char f; char l ; ...

Недопонимание с switch и выводом default - C++
Задание: сделать так что бы при вводе целого числа (от 1 до 7 которые соответствует дням недели, 1- понедельник, 2 -вторник и т.д.)...

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

неприятности с кодировкой! - C++
HerProject.cpp: главный файл проекта. #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;iostream&quot; #include &lt;conio.h&gt; #include...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2010, 15:54
Привет! Вот еще темы с ответами:

Непонятка с кодировкой - C++
Есть следующий код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using std::wstring; using std::getline; using...

Проблемы с кодировкой символов - C++
/*Письмо президенту*/ #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Russian&quot;); ...

Подскажите с кодировкой файла в UCS-2 - C++
Всем привет. Не получается получить на выходе файл в кодировке UCS-2 LE BOM. (из win-1251) Пробую так: #include &lt;iostream&gt; ...

Считать текст из файла с кодировкой utf-16 LE - C++
Возникла кое-какая проблема. У меня имеется xml файл, в кодировке UTF-16 LE с определенным содержимым. На данный момент мне нужно получить...


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

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

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