Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] Methode Length programmieren

Empfohlene Antworten

Veröffentlicht

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 ?

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.