Ein kleines Problem mit Strings?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Ein kleines Problem mit Strings?

BeitragDi, Aug 05, 2008 2:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich möchte bei einem String die anzahl von bestimmte Zeichen ausgeben, ich habe das mal so versucht:

Code: [AUSKLAPPEN]
For x=1 To 3
  Pos = Instr(Tex$,"4",Pos+1)
  If Pos > 0 Then Anzahl% = Anzahl% + 1
Next


Ich lasse die Schleife nur 3 mal durchlaufen, da es nicht mehr wie 3 Vierer in diesem String vorhanden sein dürfen.
Also, nur die ersten 3 Vierer werden gezählt, entweder 1, 2 oder 3.

z.B. Siet der Inhalt von dem String Tex$ so aus: "8+6+4+6+4+4+10" u.s.w.

Wenn ich mein Programm ausführe, dann erhalte ich den Wert 2 obwohl ich bei meinem String nur einen 4 drin habe.

Das funktioniert manchmal nicht so richtig, gibt es eine andere Methode um bestimmte anzahl von Zeichen auszugeben, diese im String enthalten sind?

Ich bedanke mich schonmal im Voraus.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Eingeproggt

BeitragDi, Aug 05, 2008 2:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre "meine" Methode. Nicht getestet, aber sollte hinhauen:

Code: [AUSKLAPPEN]
Anzahl=0
For i=1 To Len(Text$)
  If Mid(Text$,i,1)="4" Then
    Anzahl=Anzahl+1
    If Anzahl>3 Then
      Debuglog "Verdammt"
    Endif
  Endif
Next
Debuglog "Vierer: "+Anzahl


mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Xeres

Moderator

BeitragDi, Aug 05, 2008 2:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab neulich diese Funktion gebraucht und ähnlich geschrieben...
Code: [AUSKLAPPEN]
Local TestString$="8+6+4+6+4+4+10"
Print(TestString$)
Print(StringScan(TestString$, "4"))
WaitKey()

Function StringScan(fs$, zeichen$)
   ;* Sucht im String 'fs' alle 'zeichen' und gibt die anzahl zurück
   Local pos% = 0
   Local anzahl% = 0
   Repeat
      pos = Instr(fs, zeichen, pos + Len(zeichen))
      If pos = 0 Then
         Exit
      Else
         anzahl=anzahl+1
      EndIf
   Forever
   Return anzahl
End Function

Wüsste jetzt aus dem Stand nicht, worans bei dir liegen würde.

Edit:
Folgende Zeilen miteinander ersetzt, so ist's logischer:
Zitat:
pos = Instr(fs, zeichen, pos + 1)
pos = Instr(fs, zeichen, pos + Len(zeichen))
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

bruce85

BeitragDi, Aug 05, 2008 3:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch beiden.

Ich habe den Code von Eingeproggt genommen und habe es bei mir eingebaut, funktioniert fehlerfrei, vielen Dank für die Hilfe.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Der Eisvogel

BeitragDi, Aug 05, 2008 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu deinem Code:
Also, dein String sieht so aus:
Zitat:
5+4+6+7+3+9

dein Code so:
Code: [AUSKLAPPEN]
For x=1 To 3
  Pos = Instr(Tex$,"4",Pos+1)
  If Pos > 0 Then Anzahl% = Anzahl% + 1
Next


1. Durchlauf:
Er findet eine 4 an der 3. Stelle --> "Pos = 3"

2. Durchlauf:
Er sucht eine 4 die nach der 3. Stelle ist --> er findet keine --> Pos=0

3. Durchlauf:
Er sucht nach einer 4 ab der 1. Stelle, und findet wieder die an der 3. Stelle --> Pos=0 --> 0+1=1 und dieser Durchlauf gleicht dem 1. Durchlauf, und so meint das Prog 2 mal eine 4 im String gefunden zu haben

Meine Lösung:
Code: [AUSKLAPPEN]
For x=1 To 3
   Pos = Instr(Tex$,"4",Pos+1)
   If Pos = 0 Then Exit ; --> Diese Zeile muss mit rein
   If Pos > 0 Then Anzahl% = Anzahl% + 1
Next
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group