Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Einzelne Buchstaben aus einem String?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.05.2003, 12:36 Uhr
mastertango



Ich habe folgendes Prob. Ich will ein Programm das dem Alten Spiel Hangman (Glücksrad) ähnelt bauen. dabei sind 10 Wörter in einem Array gespeichert. Nach der ermittlung einer Zufallszahl wird daraufhin ein Wort aus dem Array ausgewählt und die Buchstaben werden gezählt. Anhand der Buchstaben werden Unterstrichte ausgegeben. Also 5 Buchstaben _ _ _ _ _ fünf Unterstriche. Nun soll der Benutzer Buchstaben eingeben Je nach richtig oder falsch sollen die Buchstaben angezeigt werden oder ein Zähler soll gesetzt werden bis er bei 10 ist. So weit so gut. Leider hab ich das Problem das das auslesen nicht klappt wenn ich 2 mal den selben Buchstaben im Wort habe. Habe zum suchen den Befehl "find" genommen. Bin ich da auf dem Holzweg?? Oder muss ich irgendwie in einer schleife noch einen neuen Index setzen...wie z.B suche ab Punkt wo du den letzten Buchstaben gefunden hast.....
Das ganze soll auf Konsole in Borland laufen

Hier nun mein bisheriger Grobentwurf

#include <iostream.h>
#include <conio.h>
#include<time.h>
void msg(int x,int y,string msg);
string Separator(string sSourceText,string sSeparator, int iPosition);
string swort[10]={"stinker","dorfmensch","nachtmusik","lernkultur","unwissenheit","stupide","haibecken","kirchengang","nacktbaden","nasenbluten"};
void main()
{
msg(2,1,"Galgenraten");
msg(2,2,"~~~~~~~~~~~");

int x=2;
int y=5;
int zufall;
srand((unsigned)time(NULL));
zufall=(rand()%(10-0));
string wort=swort[zufall];
string buchstabe;
int laenge=wort.length();

for(int i;i=laenge;i--)
{
msg(x,y,"- ");
laenge--;
x+=2 ;
}

int ende=0;

do
{
msg(2,10,"Geben Sie einen Buchstaben ein:");
cin>>buchstabe;

int pos=wort.find(buchstabe);
if (wort.find(buchstabe)!=string::npos)
{
msg(pos+2,4,buchstabe);
}
}
while (ende=10);

}

void msg(int x,int y,string msg)
{
gotoxy(x,y);
cout<<msg;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.05.2003, 14:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Ersetz doch mal

C++:
int pos=wort.find(buchstabe);
     if (wort.find(buchstabe)!=string::npos)
         {
            msg(pos+2,4,buchstabe);
         }


durch

C++:
    int pos=0;
    while (string::pos != (pos = wort.find_first_of(buchstabe, pos)))
    {
        msg(pos+2,4,buchstabe);
    }


Mag vielleicht noch ein Bug drin sein, aber so von der Idee her sollte es so gehen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.05.2003, 14:22 Uhr
mastertango



Nein nicht funktioniert nicht im geringsten ......niemals nicht.....aber danke.
Habe versucht es anzupassen....aber ohne Erfolg. Er hängt am "string::pos"

Gruß Master



Zitat:
virtual postete
Ersetz doch mal

C++:
int pos=wort.find(buchstabe);
     if (wort.find(buchstabe)!=string::npos)
         {
            msg(pos+2,4,buchstabe);
         }


durch

C++:
    int pos=0;
    while (string::pos != (pos = wort.find_first_of(buchstabe, pos)))
    {
        msg(pos+2,4,buchstabe);
    }


Mag vielleicht noch ein Bug drin sein, aber so von der Idee her sollte es so gehen.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.05.2003, 15:50 Uhr
virtual
Sexiest Bit alive
(Operator)


string::npos, ich glaube fast:

C++:
while (string::npos != (pos = wort.find_first_of(buchstabe, pos+1)))


sicher bin ich nicht, weil ich Deinen Code eh nicht übersetzen kann und es daher nicht ausprobieren kann. (conio.h nix Standard)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.05.2003, 23:11 Uhr
~Stimmer
Gast


int pos=-1;
while (string::npos != (pos = wort.find_first_of(buchstabe, pos+1)))
{
msg(pos+2,4,buchstabe);
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.05.2003, 10:06 Uhr
mastertango



Danke "Stimmer" diese Lösung funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: