Zum Inhalt springen

[C#] Methode Length programmieren


Empfohlene Beiträge

Geschrieben

Hi,

haben in der Berufsschule die Aufgabe bekommen, die Methode Length() nachzuprogrammieren.


static int GetLaenge(string sString)

        {

            int i=0;

            try

            {

                while (Convert.ToString(sString[i]) != "")

                {

                    i++;

                }

            }

            catch (IndexOutOfRangeException)

            {

                Console.Write("");   

            }

            return i;


        }

Das ist meine Lösung. Funktioniert auch, nur halte ich das doch ehr für suboptimal wenn ihr versteht was ich meine :)

Gibts andere Möglichkeiten als die Exception abzufangen ?

Geschrieben (bearbeitet)

Die länge eines string errechnet sich immer aus:

1 + "Die Länge des Strings, der rechts vom ersten Zeichen ist"

also:

Lienar-rekursiv


static int GET_LAENGE(string wort)

{

// Die "Abbruch bedingung der Rekursion

if (s == "")

{

[INDENT] return 0;[/INDENT]


}

else

{

[INDENT]return 1 + GET_LAENGE(s.Substring(1));[/INDENT]


}       

}

Endrekursiv:

static int GET_LAENGE(string wort, int laenge)

{

// Die "Abbruch bedingung der Rekursion

if (s == "")

{

[INDENT]return laenge;[/INDENT]


}

else

{

[INDENT]return GET_LAENGE(s.Substring(1), laenge + 1);[/INDENT]


}       

}

Die Abbruchbedingung ergibt sich immer dadurch wenn man Versucht das Problem trivial zu betrachten.

In dem Fall heisst trivial wenn der String leer ist also "".

Beachte dabei das wenn das wort aus einem Buchstaben besteht der Methodenaufruf "s.Substring(1)" einen leeren String zurück gibt und eben KEINE Exception wirft.

Wenn das zu ner Exception geführt hätte, würde mann hat

s.Substring(0) == s[0].ToString()

als Abbruchbedingung nehmen und 1 zurück geben, d.h. den Fall dass der String nur aus seinem Anfangsbuchstaben besteht als trivial betrachten.

Bei der Lienarrekursion muss der Rechner nach dem die Abbruchbedingungen "erreicht" worden ist noch die einzelenen Rückgaben der Calls aufaddieren. Somit bleiben Sämtliche Methoden Call im stack und im Arbeitsspeicher muss für jeden Call im Callstack Speicher für zu min. die Paramater reserviert sein.

Bei der Endrekursiven Lösung ist das nicht der Fall, das in dem Parameter "Laenge" die Addition erfolgt. Das Problem bei, ich glaub allen objektorientierten Sprachen ist, dass nicht zwichen lienear und Endrekursion unterschieden wird, und somit auch Endrekursiv arbeitende Methoden im Callstack verweilen.

Bearbeitet von Mcolli
Geschrieben

Moin,

ab dem .NET 3.5 gibt es die Möglichkeit, eigene Extension-Methods zu schreiben.


    public static class StringExtension

    {

        public static int MyCount(this string value)

        {

            return value.Count();

        }

    }

Extension im Einsatz

            string test = "hallo";

            int count = test.MyCount(); // 5

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...