Laden...

Prüfen, ob String ein Großbuchstabe ist

Letzter Beitrag vor 14 Jahren 11 Posts 19.689 Views
Prüfen, ob String ein Großbuchstabe ist

Hey!

Kurze Frage und hoffentlich auch kurze Antwort. 😉

Ich hab ne for-Schleife bei der jeder Buchstabe eines Strings durchgegangen wird und geprüft werden soll, ob dieser ein Großbuchstabe ist. Dabei ist unwichtig wie oft und wo Groß- oder Kleinbuchstaben vorkommen

            char[] stelle = passwort.ToCharArray();

            for (int i = 0; i < laenge; i++)
            {
                if (Convert.ToString(stelle[i]) == Großbuchstabe)
                {
                   //bool grossbuchstabenvorhanden = true;
                }
            }

Erbitte Hilfe 😉

DarkOppa

Hallo DarkOppa

Nimm Regex dafür. So kannst du einfach prüfen ob ein Grossbuchstabe vorhanden ist.
[A-Z]

Gruss Lothi

Hallo DarkOppa,

du kannst alternativ auch mit den Unicode-Werten von Großbuchstaben arbeiten und die char-Zeichen damit vergleichen. 'A' hat dabei den Wert 65.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

Wenn es einfach sein soll:


bool passwordContainsUpperLetters = password.ToLower().Equals(password);

(Wobei ich das jetzt mal auf den deutschen bzw. europäischen Sprachraum einschränke. Keine Ahnung, ob es im Unicode-Bereich irgendwo Buchstaben gibt, die da nicht mitmachen...)

Das ist zwar alles möglich, aber überflüssig kompliziert. Das gilt vor allem für das Ursprungsverfahren:

Ein String besteht aus Chars, muss also nicht in ein char-Array konvertiert werden.
Ein Char.ToString ist dann erst recht unnötig.
Insbesondere gibt es die Char.IsUpper-Methode.

Jürgen

Danke, hatte schon mit der Regex-Funktion angefangen aber mit Char.IsUpper hats dann doch schneller geklappt. 😃

edit:
Okay, doch noch nicht so ganz. Ich hab noch ne Erkennung von Kleinbuchstaben hinzugefügt aber es ist immer nur Richtig, wenn der String nur komplett groß- oder kleingeschrieben ist. Bei "tesT" müsste er ja ausgeben, dass sowohl Groß- als auch Kleinbuchstaben vorhanden sind. Stattdessen sagt er, dass keine Kleinbuchstaben vorhanden sind. Woran liegt das?


            string passwort = textBox1.Text;

            //Großbuchstaben vorhanden?
            for (int i = 0; i < laenge; i++)
            {
                if (Char.IsUpper(passwort[i]))
                {
                    bool grossbuchstaben = true;
                    label7.Text = "Ja";
                }
                else
                {
                    bool grossbuchstaben = false;
                    label7.Text = "Nein";
                }              
            }

            //Kleinbuchstaben vorhanden?
            for (int i = 0; i < laenge; i++)
            {
                if (Char.IsLower(passwort[i]))
                {
                    bool kleinbuchstaben = true;
                    label8.Text = "Ja";
                }
                else
                {
                    bool kleinbuchstaben = false;
                    label8.Text = "Nein";
                }
            }

Ich hoffe, das ist kein echter Code. Andernfalls würde ich ernsthaft fragen, warum die boolsche Variable in beiden if-Zweigen separiert deklariert wird und sowohl diese Zuweisung als auch das Schreiben in Label.Text in jedem Durchgang der Schleife neu erfolgen.

Kürzer ginge es so:

            bool grossbuchstaben;
            for (int i = 0; i < laenge; i++)
            {
                grossbuchstaben = Char.IsUpper(passwort[i]);
                label7.Text = grossbuchstaben  ? "Ja" : "Nein";
            }

Jürgen

Nachtrag: Siehste, das ist das Problem. Du brauchst eine Abbruch-Bedingung innerhalb beider Schleifen, sobald der erste Treffer gelandet wurde, und das Label wird erst nach der Schleife gesetzt.

Hallo


string gross = Regex.IsMatch("olla","[A-Z]") ? "Ja" : "Nein";

Gestützt durch diese Aussage:

Dabei ist unwichtig wie oft und wo Groß- oder Kleinbuchstaben vorkommen

Gruss Lothi

Sorry Leute, aber ich bin noch blutiger Anfänger in C#. Deswegen sieht wohl mein Code für einen Profi grausam aus. 😄

Könnt ihr mir kurz sagen, wie ich das
? "Ja" : "Nein";
verstehen soll? Ist das ein Rückgabewert oder so ähnlich? Wenn ja, wie werte ich diesen dann im Verlauf aus?


string gross = Regex.IsMatch("olla","[A-Z]") ? "Ja" : "Nein";

abfrage ? wennAbfrageTrue : wennFalse

ist Kurzform für:


string gross;
if(Regex.IsMatch("olla","[A-Z]"))
{
    gross = "Ja";
}
else
{
    gross = "Nein";
}

Gruß Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Hey,

? : ist ein Bedingsoperator. So wird er benutzt:

(bool) ? wahr:falsch;

Besser sieht amn es aber an einem Beispiel


            int x = 2;
            int y = 3;
            Console.WriteLine((x > y) ? "X Größer" : "Y Größer");

Zunächst findet der Vergleich x>y statt der ja ein bool zurückliefert in unserem Fall: false(Prinzipiell kann natürlich auch jede Methode hier stehen die ein bool zurückliefert). Dann wird das bool mit dem Bedingungsoperator überprüft.

Falls die Eingabe vor dem Fragezeichen "true", also wahr, ist wird zurückgegeben was vor dem ":" steht, falls es falsch also "false" ist, wie in unserem Fall, wird hinter dem Doppelpunkt zurückgegeben.
Hier würde also in der Console "Y Größer" ausgegeben.

[EDIT] z.B. findet man eine kurze Übersicht auch hier: Galileo Openbook C# über Bedingungsoperator(?:)

Mfg Campac