![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
invoke |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Санек Репутация: ![]() ![]() ![]() |
я только не давно начал изучать visual с++ и уменя не получилось перевести алгоритм....
![]() ![]() а вот сам алгоритм Реализуем указанный алгоритм на языке ObjectPascal. Прежде всего следует определить тип данных «таблица смещений». Для кодовой таблицы, состоящей из 256 символов, определение этого типа будет выглядеть так: type TBMTable = array [0..255] of Integer; Далее приводится процедура, вычисляющая таблицу смещений для образца P. procedure MakeBMTable( var BMT : TBMTable; const P : String); var i : Integer; begin for i := 0 to 255 do BMT[i] := Length(P); for i := Length(P) downto 1 do if BMT[Byte(P[i])] = Length(P) then BMT[Byte(P[i])] := Length(P) – i;end; Теперь напишем функцию, осуществляющую поиск. function BMSearch( StartPos : Integer; const S, P : String; const BMT : TBMTable) : Integer; var Pos, lp, i : Integer; begin lp := Length(P); Pos := StartPos + lp –1; while Pos < Length(S) do if P[lp] <> S[Pos] then Pos := Pos + BMT[S[Pos]] else for i := lp - 1 downto 1 do if P[i] <> S[Pos – lp + i] then begin Inc(Pos); Break; end else if i = 1 then begin Result := Pos – lp + 1; Exit; end; Result := 0; end; заранее спасибо..... ![]() |
![]() ![]() |
invoke |
![]() ![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Санек Репутация: ![]() ![]() ![]() |
так спасобо тебе огромное)))))))))))))))))))))))))))))))))))))))))))))))))))))))))
![]() ![]() ![]() ![]() ![]() ![]() не много доработал и все отлично работает вот код на с++char* CPousk_podstrokuDlg::StrInStr(LPTSTR Str,LPTSTR SubStr) { int i,LenStr,LenSub,BMT[256]; BYTE *pos; LenSub=strlen(SubStr); if(LenSub<1) return NULL; LenStr=strlen(Str); if(LenStr<1) return NULL; MessageBox("1"); for(i=0;i<256;i++) BMT[i]=LenSub; for(i=LenSub-1;i>=0;i--) if(BMT[(BYTE)*(SubStr+i)]==LenSub) BMT[(BYTE)*(SubStr+i)]=LenSub-1-i; MessageBox("2"); pos=(BYTE*)Str+LenSub-1; while(pos<(BYTE*)(Str+LenStr)) { if((BYTE)*(SubStr+LenSub-1) != *pos) pos+=BMT[*pos]; else for(i=LenSub-2;i>=0;i--) { if((BYTE)*(SubStr+i) != *(pos-(LenSub-1)+i)) { pos++; break; } else if(i==0) return(char*)(pos-LenSub+1); MessageBox("est sovpadenue"); } } MessageBox("netttttttttt sovpadenue"); return NULL; } void CPousk_podstrokuDlg::OnButton1() { char *s1,*s2; s1=(char*)malloc(strlen(m_edit1)); s2=(char*)malloc(strlen(m_edit2)); for(int i=0;i<strlen(m_edit2);i++) { if(i<strlen(m_edit1)) s1[i]=m_edit1[i]; s2[i]=m_edit2[i]; } StrInStr(s2,s1); + к ето тому надо добавить с++char* CPousk_podstrokuDlg::StrInStr(LPTSTR Str,LPTSTR SubStr); вот ету строчку надо написать в фаил название_проекта_dlg.h и все ето описываем public)))) volvo Респект спасибо за алгоритм вот так что тут все |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 6:02 |