Eigene Version von replace



  • Hi all!

    Ich versuche eine eigene Version (prototyp: replaceStr(string,string,string) nachzubauen jedoch funzt es leider nicht!

    Eine andere Version(prototyp: replaceStr(string,char,char) funktioniert!

    Vielen Dank für jede Hilfe!

    Hier der Code

    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
    
                    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
    
            }
    

    Bsp:

    string text = "Guten Tag";
    Funktionsaufruf: replaceStr(text,"Tag","Abend");

    Wert bleibt leider unverändert. Ich könnte auch die Parameter der Funktion per ref übergeben aber da der Wert innerhalb der Funktion nicht verändert wird, wird er es auch nicht außerhalb



  • Dein Problem hat nix mit ref out zu tun, Deine Schleife ist schlichtweg fehlerhaft, dass es mit Char funktioniert ist ebenfalls nur Zufall, versuche mal replaceStr("aaaaaaaaaaaaaaa", 'a', 'b')



  • aha thx und was mach ich falsch? Wo genau liegt der Fehler bzw in welcher schleife der beiden for schleifen?

    Bei der zweiten for schleife muß ich ja durch ALLE zeichen der strings durchgehen?

    Thx



  • Mir ist nicht ganz klar, was Du mit dieser Funktion verfolgst. Warum benutzt Du nicht einfach die Replace-Methode der Klasse string?

    string inputString = "Guten Tag.";
                string outputString = inputString.Replace("Tag", "Abend");
    


  • Danke! Aber ich implementiere gerne Funktionen und geb mich nicht mit vorgefertigten Dingen zufrieden ;-). Ist halt eine Eigenschaft von mir so wie jeder seine Vorlieben hat



  • So wie es grad versuchst kann es nichts werden. Strings sind immutable, sprich den String den du übergibst, kannst du gar nicht ändern. Sprich selbst wenn deine Ersetzungslogik richtig wäre, du bekommst den neu erstellten String net raus aus der Funktion. Deshalb bleibt dir gar nichts anderes übrig als Rückgabewerte für den neuen String zu verwenden(so macht es die .Net String Klasse) oder du verwendest ref Parameter.



  • Implement schrieb:

    Danke! Aber ich implementiere gerne Funktionen und geb mich nicht mit vorgefertigten Dingen zufrieden ;-). Ist halt eine Eigenschaft von mir so wie jeder seine Vorlieben hat

    Gegen Deine Vorlieben ist nichts einzuwenden, auch wenn Du die Farben neu erfinden willst. Aber was sind Deine Voraussetzungen, was ist Dein Ziel? Möchtest Du:

    - große Textmengen durchsuchen?
    - einen effizienteren Algorithmus finden?
    - Limitierungen der string.Replace-Methode umgehen?
    - einfach nur Spaß an der Programmierung haben (in diesem Fall beneide ich Dich)?

    Ich finde, es ist nicht zu viel verlangt von jemandem der Hilfe sucht...



  • Es ist Spass an der Programmierung 🙂



  • Implementer schrieb:

    Es ist Spass an der Programmierung 🙂

    Ja, dann wäre es aber sinnvoller Dinge zu implementieren, die es nicht schon zuhauf gibt.


Anmelden zum Antworten