Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++/MFC] ein zeichen aus einem CString ersetzen
Blocki
2007-05-20, 16:30:50
moin moin,
ich versuche schon die ganze zeit verzweifelt folgendes:
-es wird ein wort eingegeben - beispiel: None (wort ist ein CString)
-es wird fuer jeden buchstaben je ein "_ " in ein eingabefeld geschrieben
bis dahin ok...
nun will ich:
-es wird ein button gedrueckt und es soll N_n_ im eingabefeld erscheinen.
tja. ich bin zu bloed um mit Replace(); umzugehen.
kann mir einer helfen?
Matrix316
2007-05-20, 17:16:03
EDIT:http://www.uni-muenster.de/ZIV/Mitarbeiter/ReinhardMersch/C++BasisKurs6.html
CString s1;
s1.replace(i,j,s2) ersetzt den Teil von s1, der beim Index i beginnt und j Zeichen lang ist, durch s2.
Blocki
2007-05-20, 17:26:54
hmmm...
CString wort, geheim;
wort="None";
geheim="_ _ _ _";
und geheim gibt er mit in einem eingabefeld schon aus.
nun soll durch druecken auf den button "N", alle "N"s und "n"s erscheinen.
also nach klicken des buttons "N":
"N_n_";
wenn ich dann den button "O" druecke, soll dann "Non_" rauskommen. also im grunde soll das ganze das spiel hangman werden.
Matrix316
2007-05-20, 17:52:16
Oder so:
char *wort ="None";
char *geheim = "____";
Schleife mit int i über Anzahl der Buchstaben in wort:
wenn an Position i in Wort Buchstabe ... ist (wort[i]), dann soll in geheim, an der gleichen Position (geheim[i]) _ durch Buchstabe ersetzt werden.
EDIT: Kannst auch mit [] auf einen CString zugreifen! http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/vccore/html/_core_strings.3a_.basic_cstring_operations.asp
Blocki
2007-05-20, 18:15:01
EDIT:http://www.uni-muenster.de/ZIV/Mitarbeiter/ReinhardMersch/C++BasisKurs6.html
CString s1;
s1.replace(i,j,s2) ersetzt den Teil von s1, der beim Index i beginnt und j Zeichen lang ist, durch s2.
wenn ich das so mache, wie du es da geschrieben hast, bekomm ich das hier:
"D:\meine programme\hangman\MehrHaupt.cpp(176) : error C2661: 'Replace' : Keine ueberladene Funktion akzeptiert 3 Parameter."
CString buchstabek="n";
wort.Replace(1,1,buchstabek);
kannst du mir zu deinem 2. vorschlag vielleicht mal ne beispielschleife bauen? ich peil grad nix ;(.
Matrix316
2007-05-20, 18:27:28
Eingabe: char eingvariable='N'
for(int i=0; i< wort.length; i++) //halt wie du die Länge von wort bekommst
{
if(wort[i]==eingvariable)
geheim[i] = eingvariable;
}
Blocki
2007-05-20, 18:36:23
hmmm...
problem liegt darin, dass er bei
char *word=wort;
char *geheimn=geheim2;
D:\meine programme\hangman\MehrHaupt.cpp(168) : error C2440: 'initializing' : 'class CString' kann nicht in 'char *' konvertiert werden
und
D:\meine programme\hangman\MehrHaupt.cpp(169) : error C2440: 'initializing' : 'class CString' kann nicht in 'char *' konvertiert werden
auswirft...
und
geheimn[pos] = buchstabeg;
wirft
D:\meine programme\hangman\MehrHaupt.cpp(175) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich)
aus.
wohlgemerkt ist das eine MFC-Anwendung... sollte es zumindest werden.
Spearhead
2007-05-20, 20:02:47
Gibt's nen bestimmten Grund das du unter C++ dafür CString benutzt statt string?
Gibt's nen bestimmten Grund das du unter C++ dafür CString benutzt statt string?
Steht im Titel: MFC
Spearhead
2007-05-20, 21:58:47
gut, bei MFC kenn ich mich nicht aus.
Aber man könnte ja für bearbeitungen den CString in nen string umwandeln und dann sich dann wieder nen CString über var.c_str() zurückgeben lassen.
Das ganze klingt nach ner eher kleinen Anwendung da dürfte das auf die Performance keinen großen Einfluß haben ;)
Macht natürlich nur Sinn wenn der TS das bearbeiten der Strings darüber dann besser hinkriegt. Das oben genannte replace gibt es bei string z.b.:
http://www.cppreference.com/cppstring/replace.html
ShadowXX
2007-05-20, 22:11:53
hmmm...
problem liegt darin, dass er bei
char *word=wort;
char *geheimn=geheim2;
Nicht char und CString mischen. Wenn du nur CStrings benutzt funktioniert seine routine.
Also:
Eingabe:
CString eingvariable='N';
CString Wort = "None" , Geheim = "____";
for(int i=0; i < Wort.GetLength(); i++) //halt wie du die Länge von wort bekommst
{
if(Wort[i] == eingvariable)
Geheim[i] = eingvariable;
}
Blocki
2007-05-20, 22:37:28
der sagt mir bei
Geheim[i] = eingvariable;
D:\meine programme\hangman\MehrHaupt.cpp(174) : error C2440: '=' : 'class CString' kann nicht in 'char' konvertiert werden
Matrix316
2007-05-21, 09:55:04
Dann versuch mal die "EingVariable" auch als CString zu definieren.
Ectoplasma
2007-05-21, 10:46:48
CString word = "None", confidential = "____";
char typedIn = 'N';
for (int i = 0; i < word.GetLength() && i < confidential.GetLength(); ++i) {
if (tolower(word[i]) == tolower(typedIn)) {
confidential.SetAt(i, word[i]);
}
}
Das langt wohl denke ich. Sicherheitshalber erfolgt die Längenprüfung noch auf beiden Strings.
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.