Autor Beitrag
Implementer
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 28.11.07 19:38 
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:

ausblenden C#-Quelltext
1:
2:
string text = "Guten Tag";
replaceStr(text,"Tag","Abend"); //


ausblenden 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]; // place wird mit word gefüllt 
                x++; 
             } 

            for (y = 0, z = 0, l = 0; y < place.Length && z < word2.Length && l < replace.Length; y++, z++, l++) 
            { 
                Console.WriteLine(y); // Hier werden NUR die ersten 3 Elemente angezeigt statt 9 Warum?
                
                if (place[y] == word2[z]) // Da nur die ersten 3 Elemente existieren funzt auch der Vergleich nicht 
                { 

                    place[y] = replace[l]; 
                    y++; 
                    l++; 
                    z++; 

                    
                } 

            } 
            Console.WriteLine(place); // place bleibt unverändert 

}


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
golgol
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 58

Win XP Prof. / Linux
C# (VS 2005)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 29.11.07 10:45 
user profile icongolgol 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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..

ausblenden 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.
ausblenden C#-Quelltext
1:
  place[y] = replace[l];					



Aber du hast recht viell liegts an z, da z ab dem 3 Element abgebrochen wird.