kickerxy123
Erfahrenes Mitglied
Hallo!
Ich habe einige selbstgeschrieben Funktionen gebaut. "Manchmal" (ich kann nicht sagen wann...) geht es auch
also:
ich habe folgenden String
nun möchte ich einige der Werte verändern, dafür hab ich mir Funktionen geschrieben:
hoffe, dies ist nachvollziehbar... die Funktion soll also die Position in dem String nach dem Suchwort zurückliefern(Integer)
soll mir den String nach dem Suchwort bis zur nächsten eckigen Klammer liefern
fügt hoffentlich den String add in den String a ein.
soll einen Char an der angegebenen Position im String löschen
Nun kommt die "eigentliche" Funktion:
Der Aufruf erfolgt nun wie folgt:
Das Problem besteht wie gesagt darin, dass manchmal die Werte nicht ausgetauscht werden, beziehungsweise an falschen Stellen.
Ich habe keine Ahnung in welcher Funktion es schief läuft, ich hoffe ihr könnt mir helfen!
Vielen Dank!
kickerxy123
#edit: Bitte keine anderen Funktionen vorschlagen, da ich diese Funktionen auch für andere Dinge benutze, es würde mir auch helfen wenn wir vielleicht die Funktionen Step by Step überprüfen
Ich habe einige selbstgeschrieben Funktionen gebaut. "Manchmal" (ich kann nicht sagen wann...) geht es auch

also:
ich habe folgenden String
Code:
string readin = "[SOUND]1[VOLUME]100[FULLSCREEN]1[DIFFICULTY]2[PORT]5981[STRG_mx]D[STRG_mnx]A[STRG_my]LSHIFT[STRG_mny]RSHIFT[STRG_mz]W[STRG_mnz]S[STRG_rx]HOCH[STRG_rnx]RUNTER[STRG_ry]LINKS[STRG_rny]RECHTS[STRG_rz]O[STRG_rnz]P[STRG_zoomIn]BILDAUF[STRG_zoomOut]BILDAB[";
Code:
int getPosAfterWord(string str, string word)
{
int durchlauf = 0; //anzahl der Setzungen von Startmarken
string ergebnis = str;
for(int i = 0; i < strlen(str.c_str()); i++)
{
if (str[i] != word[0]) continue; //setzt den Startpunkt für die nächste for-Schleife
for(int t = 0; t < strlen(word.c_str()); t++)
{
if( str[(t+i)] != word[(t)] && word[t] != 'ä')
{
i = t+i; //Neuen Startpunkt setzen, falls möglich(strlen)
durchlauf ++;
break;
}
if( t == strlen(word.c_str())-1)
{
//i speichert nun den ersten Buchstaben des Replacements!!
return (i+strlen(word.c_str()));
}
}
}
return -1; //ungültiger "a"- String
}
Code:
string getStringAfterWord(string str, string word)
{
int pos = getPosAfterWord(str,word);
string res = "";
if(pos >=0)
{
while(str[pos] != '[' && str[pos] != '\0')
{
res += str[pos];
pos++;
}
return res;
}
else return "-1";
}
Code:
string addString(string a, int pos, string add)
{
string p = "";
for(int i = 0; i < pos; i++)
{
p+= a[i];
}
p+= add;
for(int i = pos; i < strlen(a.c_str());i++)
{
p+= a[i];
}
return p;
}
Code:
string delChar(string a,int pos)
{
string ergebnis = "";
for(int z = 0; z < strlen(a.c_str()); z++)
{
if(z != pos)
ergebnis += a[z];
}
return ergebnis;
}
Nun kommt die "eigentliche" Funktion:
Code:
string replace(string str, string rep, string new_rep)
{
string ergebnis = str;
int position = getPosAfterWord(str, rep) - strlen(rep.c_str());
if(position < 0) return "-1";
for(int i = 0; i < strlen(rep.c_str()); i++)
{
ergebnis = delChar(ergebnis, position);
}
//ergebnis ist jetzt ohne "rep"
ergebnis = addString(ergebnis, position,new_rep);
//neue Passage einfügen
return ergebnis;
}
Der Aufruf erfolgt nun wie folgt:
Code:
readin = (replace(readin,getStringAfterWord(readin,"[SOUND]"),intToString((int)SET.STG_SOUND)));
readin = (replace(readin,getStringAfterWord(readin,"[FULLSCREEN]"),intToString((int)SET.STG_FULLSCREEN)));
readin = replace(readin,getStringAfterWord(readin,"[VOLUME]"),SET.STG_VOLUME);
readin = (replace(readin,getStringAfterWord(readin,"[PORT]"),NET.NET_PORT));
readin = (replace(readin,getStringAfterWord(readin,"[STRG_mx]"),steuerung.moveX));
readin = (replace(readin,getStringAfterWord(readin,"[STRG_my]"),steuerung.moveY));
//USW....
Ich habe keine Ahnung in welcher Funktion es schief läuft, ich hoffe ihr könnt mir helfen!
Vielen Dank!
kickerxy123
#edit: Bitte keine anderen Funktionen vorschlagen, da ich diese Funktionen auch für andere Dinge benutze, es würde mir auch helfen wenn wir vielleicht die Funktionen Step by Step überprüfen
Zuletzt bearbeitet: