Ein kleines Problem mit Strings?
Übersicht

bruce85Betreff: Ein kleines Problem mit Strings? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group