Algorytm sprawdzający ilość liter zgadzających się z inną zmienną string

Odpowiedz Nowy wątek
2011-09-06 17:32
von_ilnicki
0

prosiłbym was o pomoc, bo sam nie mam pojęcia jak to zrobić.

słuchajcie. mam przykładowo dwie zmienne string o różnych łańcuchach znaków. jak sprawdzić zatem, ile liter zgadza sie w jednej ze zmiennych z druga zmienna.

np.
zmienna string o wartości "pole" i zmienna string o wartości "bolek". System powinien obliczyć, i przedstawić liczbowo, ze wartosc "pole" ma 3 wspolne litery z wartoscia "bolek".

Dziekuję z góry!

edytowany 2x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-09-06 17:41
0

Pokaż co masz, jak zobaczymy że się starasz to pomożemy.

Albo: Podaj ile jesteś w stanie dać.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.

Pozostało 580 znaków

2011-09-06 17:44
bo
0

A jaka powinna być odpowiedź dla "lama" i 'mleka"? (Litera "a" jest w obu słowach, różna jest krotność występowania.)

Pozostało 580 znaków

2011-09-06 17:49
von_ilnicki
0

payl

nie, przysięgam że próbowałem ale... no.. nie potrafię!

znam pętle for, znam funkcję lenght, wiem że trzeba zliczać i kiedy, próbowałem ze staticcast (czyli funkcja lenght. --> ze stringiem PojedynczyZnak przez static)cast na char i porównywać) ale nie działa...

Pozostało 580 znaków

2011-09-06 17:52
Rev
0

A Wikipedię i Google znasz?

http://en.wikipedia.org/wiki/Longest_common_substring_problem


Chodziło chyba o ilość wspólnych znaków a nie lcs. - msm 2011-09-17 20:11

Pozostało 580 znaków

2011-09-06 17:54
0
function EditDistance(s, t: ansistring): double;
  var
    d : array of array of integer;
    i,j,cost : integer;
  begin
    if (length(s)=0)and(length(t)=0) then exit(0.0);
    {
    Compute the edit-distance between two strings.
    Algorithm and description may be found at either of these two links:
    http://en.wikipedia.org/wiki/Levenshtein_distance
    http://www.google.com/search?q=Levenshtein+distance
    }
 
    try
      //initialize our cost array
      SetLength(d,Length(s)+1);
      for i := Low(d) to High(d) do begin
        SetLength(d[i],Length(t)+1);
      end;
 
      for i := Low(d) to High(d) do begin
        d[i,0] := i;
        for j := Low(d[i]) to High(d[i]) do begin
          d[0,j] := j;
        end;
      end;
 
      //store our costs in a 2-d grid
      for i := Low(d)+1 to High(d) do begin
        for j := Low(d[i])+1 to High(d[i]) do begin
          if s[i] = t[j] then begin
            cost := 0;
          end
          else begin
            cost := 1;
          end;
 
          //to use "Min", add "Math" to your uses clause!
          d[i,j] := Min(Min(
                     d[i-1,j]+1,      //deletion
                     d[i,j-1]+1),     //insertion
                     d[i-1,j-1]+cost  //substitution
                     );
        end;  //for j
      end;  //for i
 
      //now that we've stored the costs, return the final one
      Result := d[Length(s),Length(t)];
    finally
      //cleanup
      for i := Low(d) to High(d) do begin
        for j := Low(d[i]) to High(d[i]) do begin
          SetLength(d[i],0);
        end;  //for j
      end;  //for i
      SetLength(d,0);
    end;  //try-finally
    result:=max(length(s),length(t))-result;
    result:=result/max(length(s),length(t));
  end;

Zadowolony? No to super.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.

Pozostało 580 znaków

2011-09-06 18:03
von_ilnicki
0

a takie coś?

#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
int main()
{
    char chZnak;
    unsigned uIlosc, uIlosc2, z, i, j;
    string strTekst, strTekst2;
    for ( x = 1; x < 24; ++x)
    {
        if (x = 1) chZnak = 'a';if (x = 7) chZnak = 'g';if (x = 13) chZnak = 'm';if (x = 19) chZnak = 't';
        if (x = 2) chZnak = 'b';if (x = 8) chZnak = 'h';if (x = 14) chZnak = 'n';if (x = 20) chZnak = 'u';
        if (x = 3) chZnak = 'c';if (x = 9) chZnak = 'i';if (x = 15) chZnak = 'o';if (x = 21) chZnak = 'w';
        if (x = 4) chZnak = 'd';if (x = 10) chZnak = 'j';if (x = 16) chZnak = 'p';if (x = 22) chZnak = 'z';
        if (x = 5) chZnak = 'e';if (x = 11) chZnak = 'k';if (x = 17) chZnak = 'r';if (x = 23) chZnak = 'y';
        if (x = 6) chZnak = 'f';if (x = 12) chZnak = 'l';if (x = 18) chZnak = 's';
 
         uIlosc = 0 ;
         for ( i = 0 ; i <= strTekst.length() - 1 ; ++i)
         {
             uIlosc2 = 0 ;
             for ( j = 0 ; j <= strTekst2.length() - 1 ; ++j)
             {
                 if (strTekst[i] == strTekst2[j]) uIlosc += 1;
             }
         }
 
    }
 
}
W tej pętli trochę przekombinowałeś :) - szypxx 2011-09-06 18:04

Pozostało 580 znaków

2011-09-06 18:07
von_ilnicki
0

nie chce działać.
mimo iż dodałem na początku i końcu jakiś komunikat wyświetla się tylko ten początkowy i potem nic nie idzie dalej.

oj, sorki payl. nie zauważyłem twojego postu.
a co do kodu to nie chce się twój skompilować.

Pozostało 580 znaków

2011-09-06 18:36
1

a co do kodu to nie chce się twój skompilować.

Ubolewam nad tym iż nie masz możliwości dania kodów diagnostycznych kompilatora wobec czego nigdy nie rozwiążemy Twojego problemu. Do zobaczenia w następnym wcieleniu.

EDIT:
A TY W OGÓLE POWIEDZIAŁEŚ JAKI KOMPILATOR? BO JEST WIĘCEJ NIŻ JEDEN. cholera, znowu flamuje.


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
edytowany 2x, ostatnio: payl, 2011-09-06 18:40

Pozostało 580 znaków

2011-09-06 20:03
Kumashiro
0

A czy tu przypadkiem nie chodzi o zwykłą intersekcję, gdzie kolejność liter nie ma znaczenia?

"pole" ∩ "bolek" = {'e', 'l', 'o'}
"dupa" ∩ "papier" = {'a', 'p'}

itp.

Pozostało 580 znaków

2011-09-06 20:53
0

A moze chodzi o Odległość Levenshteina?

Przecież dałem na to kod... >.> - payl 2011-09-06 21:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0