Avatar billede dilling-hansen Nybegynder
18. marts 2008 - 04:16 Der er 4 kommentarer og
1 løsning

Liste anagrammer

Jeg ville prøve at lave et program til at liste alle anagrammer for at ord i en listbox/memo, men jeg ved bare ikke rigtig hvordan man kan gøre det :\ er der nogen der kan hjælpe lidt igang :)

fra wikipedia "Et anagram er et ord som er dannet ved omflytning af et andet ords bogstaver"
men her er behøver ordet ikke betyde noget, den skal bare liste alle muligheder :)
Avatar billede hrc Mester
18. marts 2008 - 09:04 #1
Skal den generere rigtige anagrammer eller skal det være alle mulige kombinationer uden skelen til valide stavelser?

OK anagrammer:
  Cykel
  Kycel
  Cekyl

men ikke disse:
  Kcley
  Yeckl (lyder hebraisk, men er i alt fald ikke dansk)

Se evt. dette link: http://wordsmith.org/anagram/
Avatar billede hrc Mester
18. marts 2008 - 09:15 #2
Fandt og rettede dette lidt til (http://www.delphi3000.com/articles/article_3407.asp?SK=). Skal holdes op mod en eller anden stavekontrol

procedure TfrmMain.Anagramize(aList: TStrings; const aInput: string);

  // Internal Recursive routine
  procedure RecursePerm(const aStrA, aStrB : string; const aLength : integer; aStrings : TStrings);
  var
    i: integer;
    A,B: string;
  begin
    // Is built up word the length we require ?
    if length(aStrA) = aLength then
    begin
      // Check if not a duplicate and search dictionary for valid word check.
      if (aStrings.IndexOf(aStrA) = -1) { and MsWordApp.CheckSpelling(StrA) } then
          aStrings.Add(aStrA);
    end;

    for i := 1 to length(aStrB) do
    begin
      // Recursively build all possible permutations of word
      A := aStrB;
      B := aStrA + A[i];
      delete(A,i,1);
      RecursePerm(B,A,aLength,aStrings);
    end;
  end;

begin
  aList.BeginUpdate;
  try
    aList.Clear;
    RecursePerm('',AnsiLowerCase(aInput),length(aInput),aList);
  finally
    aList.EndUpdate;
  end;
end;
Avatar billede dilling-hansen Nybegynder
18. marts 2008 - 12:49 #3
kan ikke få det til at virke xD kan ikke lige se hvor den skulle komme med at output :\
og så på linket for du fandt det, tjeckede den i en "ordbog" tænkte på om man så kunne få den til at tjecke i min egen ordbog, hvis jeg fx laver en "ordbog.txt" med en masse i :P
Avatar billede hrc Mester
18. marts 2008 - 14:53 #4
Jeg har kommenteret stavekontrolopslaget ud - burde være let at lave en tilsvarende funktion til egen database. Du skal bare lave noget der ligner MsWordApp.CheckSpelling(StrA) som sikkert returnerer true hvis det er validt. I Linket kan du i øvrigt se hvordan han sætter forbindelsen op til office - og så kan du bruge den database.

Måden data hentes over er meget simpel, her et TListBox:

begin
  Anagramize(ListBox.Items,'Teststreng');
Avatar billede dilling-hansen Nybegynder
18. marts 2008 - 18:27 #5
takker ;) så kører den som den skal :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester