C# :: Aufgabe #387

3 Lösungen Lösungen öffentlich

Zweitgrößte Ziffer eines alphanumerischen Textes

Anfänger - C# von JKooP - 18.04.2021 um 11:04 Uhr
Gegeben ist ein alphanumerischer Text (String) der nur Kleinbuchstaben und die positiven Ziffern 0-9 enthält.
Ziel soll es sein, die zweitgrößte Ziffer (nicht Index) des Textes zu ermitteln.
Ist kein zweitgrößter Wert enthalten, soll als Ergebnis -1 ausgegeben werden.

Beispiele:
t = "abc12321efg"
Lösung: 2 => [1, 2, 3]

t = "abc111def"
Lösung: -1 => [1] Kein zweiter Wert vorhanden!

Erstelle eine Methode/Funktion, die obige Aufgabenstellung umsetzt.

Viel Spaß

Lösungen:

vote_ok
von dson (640 Punkte) - 22.04.2021 um 09:01 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Linq;
using System.Collections.Generic;

namespace zweitgroeste_nummer_aus_zahl_text_string
{
    class Program
    {
        static void Main(string[] args)
        {
            string t = "abc5555555efg";
            
            //Hier wird der String in einzelne char aufgeteilt und in eine Liste geschrieben
            List<char> stringinchar = t.ToList<char>();
            //Mittels dieser Liste werden später die chars in eine Integer Liste geschrieben
            List<int> zahlen = new List<int>();
           
            //Handel es sich bei den Chars in stringinchar um eine zahl zwischen 0 und 9 so wird diese in einen string und dann in einen Integer konvertiert (ansonsten wird der ASCII Code der Zahl ausgegeben.)
            foreach (var item in stringinchar)
            {
                if (item.Equals('0') || item.Equals('1') || item.Equals('2') || item.Equals('3') || item.Equals('4') || item.Equals('5') || item.Equals('6') || item.Equals('7') || item.Equals('8') || item.Equals('9'))
                {
                    zahlen.Add(Convert.ToInt32(item.ToString()));           //Das ToString nach dem item Hilft die Zahl auch als jene die benötigt wird weiter zu geben. Ansonsten wird statt 1, 49 ausgegeben (ASCII Code). 
                    
                }
            }

            //Nun werden die Zahl der größe nach Sortiert
            zahlen.Sort();
            int zahl1 = zahlen.Last();  //zahl1 erhält den letzten und somit den höchsten wert aus der Liste
            int zahl2 = 0; 

            //Jetzt wird Herausgefunden welche die Zweithöchste Zahl ist und dann in die Variable zahl2 geschrieben
            foreach (var item in zahlen)
            {
                if (item >= zahl2 && item < zahl1)
                {
                    zahl2 = item;
                }
            }

            //Gibt die Zahl 2 "0" zurück so sind alle zahlen in der Liste gleich.
            if (zahl2 == 0)
            {
                Console.WriteLine("Kein Zweiter Wert vorhanden, somit ist die einzige Zahl: {0}", zahlen.Last());
            }
            else     //gibt den zweithöchsten wert aus.
            {
                Console.WriteLine("Der zweithöchste Wert ist: {0}",zahl2);
            }
        }
    }
}

vote_ok
von JKooP (18090 Punkte) - 17.05.2021 um 17:53 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System.Linq;

var s = "abc12321efg";
System.Console.WriteLine(SecondHighest(s));

int SecondHighest(string s)
{
    var r = s.Where(x => x is >= '0' and <= '9').GroupBy(x => x).Select(x => x.Key - '0').OrderBy(x => x).ToList();
    return r.Count < 2 ? -1 : r[1];
}
vote_ok
von Heftog (300 Punkte) - 06.06.2021 um 13:05 Uhr
Quellcode ausblenden C#-Code
        private static int HandleString(string input)
        {
            var result = input.Where(c => char.IsDigit(c)).Distinct().OrderBy(c => c).ToList();
            return result.Count() > 1? int.Parse(result[1].ToString()) : -1;
            
        }