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

Схожесть текстов (расстояние Левенштейна) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Добавить счетчик количества произведенных замен текста в программу http://www.cyberforum.ru/cpp-beginners/thread1212007.html
помогите пожалуйста! имеется программа, ищущая заметы в тексте. Текст и список замен берутся из отдельных файлов. на защите программы препод сказал сделать, что бы исходная заменяемая подстрока и ее замена выводились на консоль и посчитать число раз, сколько раз замена применялась. помогите сделать этот счетчик, который считает количество раз использования замены#include <conio.h> #include...
C++ Инициализация указателя с malloc ? Я тут прочитал про malloc, верно ли я понял? Есть: char* pszBuffer; Выходит лучше сделать так? char* pszBuffer = static_cast< char* >( malloc( 16 * sizeof( char* ) ) ); //Работа над ним.. http://www.cyberforum.ru/cpp-beginners/thread1212002.html
Не создается указатель из-за базового класса с конструктором C++
class Cbase { public: virtual void Start( ); int iGlobal; Cbase( int num ) { iGlobal = num ;
Законно ли использовать указатель wchar_t таким образом? C++
Всем привет! Меня мучает вопрос: wchar_t* wstr; wstr = L"TROLOLOLOOMGPWNDALL"; У меня выделяется нужное кол-во памяти под эту строку, или же я залезаю за пределы дозволенного? Просто часто бывает лень для каждой строки писать new wchar_t, поэтому, замучил вопрос о законности и правильности вышеописанного кода... Буду благодарен за ответ =)))
C++ Что делает метод cin.ignore? http://www.cyberforum.ru/cpp-beginners/thread1211959.html
cin.ignore(0,'\n'); Что она делает?
C++ Создать односвязный линейный список, элементами которого являются натуральные числа создать односвязный линейный список, элементами которого ясвляются натуральные числа. Напечатать значения елементов, росположенных между максимальными и миннимальными елементами списка/ С++ подробнее

Показать сообщение отдельно
r0mzes121
7 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 4
19.06.2014, 07:28     Схожесть текстов (расстояние Левенштейна)
Программа, которая сравнивает 2 теста на схожесть из 1.txt и 2.txt нужно что бы программа не подсчитывала восклицательные знаки и вопросительные

то есть 2 одинаковых текста но в конце второго будет куча восклицательных знаков процентовка всё ровно будет 100%

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
#include <stdio.h>
#include <vector>
#include <fstream>
#include <string.h>                                      
#include <conio.h>                                       
#include  <time.h>                                      
using namespace std;
 
char * read_file (const char * name) {
    FILE * file = fopen(name, "r");
 
    fseek(file, 0, SEEK_END);
    int len = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    char * s = new char[len + 1];
    len = fread(s, 1, len, file);
    s[len] = 0;
 
    fclose(file);
 
    return s;
}
 
int min3(int n1, int n2, int n3) {
    int ans = n1;
    if (n2 < ans)
        ans = n2;
    if (n3 < ans)
        ans = n3;
    return ans;
}
 
int m(char a, char b) {
    if (a == b)
        return 0;
    else
        return 1;
}
 
int levenstein_distance(char * s1, char * s2) {
    int l1 = strlen(s1);
    int l2 = strlen(s2);
 
    vector<int> current_row(l2 + 1);
    vector<int> previous_row(l2 + 1);
 
 
    for (int j = 0; j <= l2; j++)
        current_row[j] = j;
 
    for (int i = 1; i <= l1; i++) {
        previous_row = current_row;
        current_row[0] = i;
        for (int j = 1; j <= l2; j++) {
            int temp1, temp2, temp3;
            temp1 = previous_row[j] + 1;
            temp2 = current_row[j-1] + 1;
            temp3 = previous_row[j-1] + m(s1[i-1], s2[j-1]);
            current_row[j] = min3(temp1, temp2, temp3);
 
        }
    }
 
    return current_row[l2];
}
 
int main () {
    clock_t time;
    time=clock();
    const char * NAME1 = "1.txt", * NAME2 = "2.txt";
    char * s1, * s2;
    int l1, l2;
 
    s1 = read_file(NAME1);
    s2 = read_file(NAME2);
    if (strlen(s1) == 0 && strlen(s2) == 0)
    printf("100%%\n");
    else
    printf("%.3f%%\n", 100 * (1 - (float)levenstein_distance(s1, s2) / max(strlen(s1), strlen(s2))));
    time=clock() - time;
    printf("%f", (double)time/CLOCKS_PER_SEC);
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru