GLBasic forum

Other languages => GLBasic - de => Topic started by: xverbatim on 2008-Nov-21

Title: im string suchen
Post by: xverbatim on 2008-Nov-21
Hallo,

wie könnte ich es hinbekommen, eine buchstabenkombination in einem wort zu finden ?
ein beispiel

ich habe zwei string variablen

1) wort$="auto"

2) eingabe$="tau"


jetzt möcht ich überprüfen, ob die eingabe$ im string wort$ vorkommt; hier tut sie es, t ist im auto, a ist im auto, u ist im auto

ich möchte ein spiel schreiben, wo alle möglichen kombinationen erkannt werden; also alle möglichkeiten, wörter aus einem wort zu bilden(die die buchstaben enthalten)

z.B.
autobus = enthält z.b. auto, bus, tau, bau, sut etc...


soweit hatte ich es ja geschaft, nur wenn die variable wort$="autto" enthält ALSO DAS PROBLEM IST WENN BUCHSTABEN DOPPELT vorkommen, dann das richtige Wort
nicht mehr erkannt werden kann...

ich könnte natürlich das eingegebene wort mit einer langen liste vergleichen, aber das möchte ich aus performance gründen lieber nicht machen...

hat jemand einen nachvollziehbaren tipp ? für *newbies ;-)*

Gruß + Danke
Thomas


Code (glbasic) Select


DIM a$[100]
DIM b$[100]

// feld$="auto" und word$="tau"  läuft wenn feld$="autto" und word$="tau" gehts nicht ...

feld$="auto"
word$="tau"

LOADFONT "smalfont.png",0;SETFONT 0

z=0

FOR x=0 TO LEN(word$)-1
FOR i=0 TO LEN(feld$)-1
 
  // wenn ein Buchstabe gefunden z +1
  IF MID$(word$,x,1)=MID$(feld$,i,1)
   INC z,1 
  ENDIF
 
NEXT
NEXT

IF z=LEN(word$)

PRINT "WORT IST VORHANDEN ",100,100

ELSE
PRINT "Wort nicht vorhanden ",100,100
ENDIF

SHOWSCREEN

KEYWAIT
Title: Re: im string suchen
Post by: Quentin on 2008-Nov-21
annäherungsweise könntest du es mal so versuchen

hat allerdings noch die Schwachstelle, daß z.B. "tatu" auch gefunden würde, obwohl "t" in feld$ nur einmal vorkommt. Wenn du das auch noch abfangen willst, könntest du z.B. jeden gefunden Buchstaben aus feld$ anschließend herauslöschen.

Code (glbasic) Select

feld$="auto"
word$="tau"

LOADFONT "smalfont.png",0;SETFONT 0

// erst mal davon ausgehen, daß alle Buchstaben aus word$ in feld$
// enthalten sind
gefunden = TRUE

FOR x = 0 TO LEN(word$)   
  // jetzt für jeden Buchstaben aus word$ prüfen, ob er in feld$ vorkommt
  // wenn nicht, kann man die Suche abbrechen         
  IF INSTR(feld$, MID$(word$, x, 1)) = -1
    gefunden = FALSE
    BREAK
  ENDIF
NEXT

IF gefunden
  PRINT "WORT IST VORHANDEN ",100,100
ELSE
  PRINT "Wort nicht vorhanden ",100,100
ENDIF

SHOWSCREEN

KEYWAIT
Title: Re: im string suchen
Post by: xverbatim on 2008-Nov-21
Quote from: Quentin on 2008-Nov-21
annäherungsweise könntest du es mal so versuchen

hat allerdings noch die Schwachstelle, daß z.B. "tatu" auch gefunden würde, obwohl "t" in feld$ nur einmal vorkommt. Wenn du das auch noch abfangen willst, könntest du z.B. jeden gefunden Buchstaben aus feld$ anschließend herauslöschen.

Code (glbasic) Select

feld$="auto"
word$="tau"

LOADFONT "smalfont.png",0;SETFONT 0

// erst mal davon ausgehen, daß alle Buchstaben aus word$ in feld$
// enthalten sind
gefunden = TRUE

FOR x = 0 TO LEN(word$)   
  // jetzt für jeden Buchstaben aus word$ prüfen, ob er in feld$ vorkommt
  // wenn nicht, kann man die Suche abbrechen         
  IF INSTR(feld$, MID$(word$, x, 1)) = -1
    gefunden = FALSE
    BREAK
  ENDIF
NEXT

IF gefunden
  PRINT "WORT IST VORHANDEN ",100,100
ELSE
  PRINT "Wort nicht vorhanden ",100,100
ENDIF

SHOWSCREEN

KEYWAIT


Hi Quentin,

Danke für Deine Mühe...ja, die Sache mit dem löschen ging mir auch durch den Kopf..

ich glaube, Dein Beispiel inspiriert mich, mein Code zu kürzen ;-)
ich mache das alles viel zu kompliziert glaube ich, aber naja, lerne ja noch ;-)

ich hatte es gerade hinbekommen ;-)
hier meine lllllllaaaaaannnnnnnggggggeeeeeee Version, habe bis jetzt kein Fehler entdeckt ;-)
wen´s interessiert

danke nochmal+gruß thomas

Code (glbasic) Select

LOADFONT "smalfont.png",0;SETFONT 0

ja=pruefe_wort("auto","tau")

IF ja=1
PRINT "WORT IST VORHANDEN ",100,100
  ELSE
PRINT "Alle Buchstaben im Wort nicht vorhanden",100,100
ENDIF

SHOWSCREEN
KEYWAIT

// Prüfe ob das wort z.b. eingabe$="tau" in feld$="autobus" vorkommt"
// ------------------------------------------------------------- //
// ---  PRUEFE_WORT  ---
// ------------------------------------------------------------- //
FUNCTION pruefe_wort: feld$, eingabe$
// Diese Variablen sind als LOCAL definiert:
// feld$, eingabe$

FOR x=0 TO LEN(eingabe$)-1

FOR i=0 TO LEN(feld$)

buchstabe$=MID$(eingabe$,x,1)
such$=MID$(feld$,i,1)

IF such$=buchstabe$
anfang$=MID$(feld$,0,i)
ende$=MID$(feld$,i+1,LEN(feld$))
feld$=anfang$+ende$

z=z+1
i=LEN(feld$) //mittlere Schleife beenden

ENDIF
NEXT

NEXT

ende:

IF z=LEN(eingabe$)
state=1

ELSE
state=-1


ENDIF
RETURN state
ENDFUNCTION // PRUEFE_WORT

Title: Re: im string suchen
Post by: Quentin on 2008-Nov-22
hehe, ja erst mal ist es ja wichtig, daß das Programm so arbeitet, wie es soll. Über Tunigmaßnahmen sollte man sich erst anschließend Gedanken machen.
Title: Re: im string suchen
Post by: Kitty Hello on 2008-Nov-23
Äh.... INSTR???
Title: Re: im string suchen
Post by: Schranz0r on 2008-Nov-24
 O_O jetzt hast du mir den Spass verdorben :D
Ich hab das beobachtet, und wollte gucken wer als erstes auf das InStr kommt   :|
Title: Re: im string suchen
Post by: Quentin on 2008-Nov-24
äh Bahnhof?
Title: Re: im string suchen
Post by: Kosta on 2008-Nov-24
Stümmt,
Quentin nutzt doch INSTR    :whistle:
Title: Re: im string suchen
Post by: BumbleBee on 2008-Nov-24
Stimmt, das INSTR seh sogar ich bis hierher.  ;)

Cheers
Title: Re: im string suchen
Post by: xverbatim on 2008-Nov-24
Hi,

jetzt war ich so stolz, das ich das hinbekommen habe und dann  :puke: kommt mir kitty mit instr  :'(
wäre natürlich am effektivsten gewesen; aber mit instr habe ich früher schon nicht gearbeitet, deshalb wohl
die macht der gewohnheit  :whistle:

wäre das eigentlich irgendwie performancemäßig von bedeutung ?
*frag nur mal so interessehalber*


aber mein code läuft so erstmal 1a und jetzt nochmal mit instr habe ich nicht die muse....
falls jemand aus dem code ein 3 zeiler machen könnte, würde ich den natürlich nehmen  :good:


übrigens wer AUFMERKSAM gelesen hat
--->
"Hi Quentin,
ich glaube, Dein Beispiel inspiriert mich, mein Code zu kürzen ;-)
ich mache das alles viel zu kompliziert glaube ich, aber naja, lerne ja noch ;-)"

Gruß Thomas
p.s. GLBASIC wird mir immer sympathischer ;-)


Title: Re: im string suchen
Post by: Schranz0r on 2008-Nov-24
Quote from: BumbleBee on 2008-Nov-24
Stimmt, das INSTR seh sogar ich bis hierher.  ;)

Cheers

Quentin ja, xverbatim nicht ;)

Deshalb Gernot -> Says -> INSTR :P
Title: Re: im string suchen
Post by: Kitty Hello on 2008-Nov-25
 =D Bitte, bitte, bitte vergleich doch mal 10000 String mit Deiner, und dann mit INSTR und nimm die Zeiten:

start=GETTIMERALL()
Deine()
start2=GETTIMERALL()
Meine()
ende=GETTIMERALL()
PRINT "Deine "+(start2-start)+" Meine "+(ende-start2), 0,0
SHOWSCREEN
WaitForYawdrop()
Title: Re: im string suchen
Post by: xverbatim on 2008-Nov-25
Quote from: Kitty Hello on 2008-Nov-25
=D Bitte, bitte, bitte vergleich doch mal 10000 String mit Deiner, und dann mit INSTR und nimm die Zeiten:

start=GETTIMERALL()
Deine()
start2=GETTIMERALL()
Meine()
ende=GETTIMERALL()
PRINT "Deine "+(start2-start)+" Meine "+(ende-start2), 0,0
SHOWSCREEN
WaitForYawdrop()

jepp  =D hast mich überzeugt .......
gruß tom