Entwickler-Ecke
C# - Die Sprache - Meine replace Funktion
Implementer - Mi 28.11.07 19:38
Titel: Meine replace Funktion
Hi alle!
Ich versuche die replace Version nachzubauen, komme aber leider zu keinem positiven Ergebnis. Ich hoffe das mir vielleicht in diesem Forum jemand helfen kann.
Warum nehm ich nicht einfach die String.replace Funktion? Nunja, ich interessiere mich nunmal dafür wie "vorgefertigte" Funktionen funktionieren und versuche sie nachzubauen
:-).
Mit ref out hab ich nicht gearbeitet da ja nichtmal in der Funktion der Wert verändert wird.
Ich habe nach dem gleichen Prinzip eine replace Funktion für chars geschrieben und diese funktioniert. Komisch ?
Vielen Dank für jede Hilfe
Hier mein Code:
Bsp:
C#-Quelltext
1: 2:
| string text = "Guten Tag"; replaceStr(text,"Tag","Abend"); |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| public static void replaceStr(string word, string word2, string replace) { int i; int x = 0, y, z, l; char[] place = new char[word.Length]; for (i = 0; i < word.Length; i++) { place[x] = word[i]; x++; }
for (y = 0, z = 0, l = 0; y < place.Length && z < word2.Length && l < replace.Length; y++, z++, l++) { Console.WriteLine(y); if (place[y] == word2[z]) {
place[y] = replace[l]; y++; l++; z++;
}
} Console.WriteLine(place); } |
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Christian S. - Do 29.11.07 01:07
Du erhöhst in jedem Schleifendurchlauf z und die Schleife bricht ab, wenn z den Wert word2.Length erreicht hat und das ist 3.
Könntest Du evtl. erklären, wie Deine Schleife funktionieren soll? Ich blick da nicht so ganz durch :gruebel:
golgol - Do 29.11.07 09:50
Die Schleife ist mir derzeit auch nicht ganz klar. Davon abgesehen müsstest du aber Probleme bekommen, wenn das Originalwort länger als das zu ersetzende Wort ist, da du die Array-Länge fest mit der Länge des Original-Strings dimensionierst. In deinem Beispiel hätte der String voher 9 und nachher 11 Buchstaben, das Array ist aber nur 9 Buchstaben lang => IndexOutOfRangeException
JüTho - Do 29.11.07 10:45
golgol hat folgendes geschrieben: |
... Davon abgesehen müsstest du aber Probleme bekommen, wenn das Originalwort länger als das zu ersetzende Wort ist, da du die Array-Länge fest mit der Länge des Original-Strings dimensionierst... |
Und deshalb gleich noch den nächsten allgemeingültigen Hinweis: Wenn Strings "verändert" werden sollen, vor allem mehrfach (z.B. in einer Schleife), dann ist unbedingt der
StringBuilder zu verwenden. Strings sind unter C# sowieso unveränderlich; Änderungen führen deshalb zu ständigem Hin und Her im Arbeitsspeicher. Jürgen
Implementer - Do 29.11.07 16:21
Vielen Dank für eure Antworten!
Ich habe eine andere Funktion geschrieben die alle chars in einem Wort ersetzen soll und diese funzt nach dem gleichen Prinzip und geht :gruebel:
Zitat: |
Könntest Du evtl. erklären, wie Deine Schleife funktionieren soll? |
Die erste for schleife:
Zuerst wird das Array place mit dem Inhalt von string word gefüllt
Die zweite for schleife:
y,z,l sollen alle chars durchlaufen.
y soll alle chars von place durchlaufen, z alle chars von word2 usw..
C#-Quelltext
1:
| for (y = 0, z = 0, l = 0; y < place.Length && z < word2.Length && l < replace.Length; y++, z++, l++) |
Werden im place Array chars von word2 gefunden
if (place[y] == word2[z]) sollen die place[y] chars durch die replace[l] chars ersetzt werden.
C#-Quelltext
1:
| place[y] = replace[l]; |
Aber du hast recht viell liegts an z, da z ab dem 3 Element abgebrochen wird.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!