C# :: Aufgabe #389 :: Lösung #3

4 Lösungen Lösungen öffentlich
#389

Vokale tauschen (rückwärts ausgeben)

Anfänger - C# von JKooP - 16.04.2021 um 21:31 Uhr
Gegeben ist eine Zeichenkette (Wort) welche nur aus Groß- und Kleinbuchstaben gebildet wird.
Ziel ist es, die Zeichen so zu verändern, dass der erste Vokal mit dem letzten, der zweite mit dem vorletzten
und so weiter getauscht wird. Konsonanten werden nicht verändert.
Groß- und Kleinschreibung soll beachtet werden.

Beispiele:
s = Hallo
Lösung: Holla

s = Heidi
Lösung: Hiide (Das "i" in der Mitte bleibt erhalten, da kein Tauschpartner vorhanden!)

s = trAInyOUrprOgrAmmEr
Lösung: trEAnyOUrprOgrImmAr

Erstelle eine Methode/Funktion, die oben beschriebene Aufgabenstellung erledigt.

Viel Spaß
#3
2 Kommentare
vote_ok
von dson (640 Punkte) - 21.04.2021 um 15:12 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Linq;
using System.Collections.Generic;

namespace vokabeln_tauschen
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "trAInyOUrprOgrAmmEr";   //Text welcher bearbeitet wird.
            int position = 0;

            List<char> liste1 = new List<char>();  
            char[] buchstaben = s.ToCharArray();

            //Hier werden alle Umlaute aus dem Zeichensatz heraus gefiltert und in verkehrter reihenfolge auf die liste1 geschrieben.
            foreach (var item in buchstaben.Reverse())
            {
                if (item.Equals('a') || item.Equals('e') || item.Equals('i') || item.Equals('o') || item.Equals('u') || item.Equals('A') || item.Equals('E') || item.Equals('I') || item.Equals('O') || item.Equals('U'))
                {
                    liste1.Add(item);
                }
            }
            //Damit der Folgende Codeblock sich leochter und kürzer umsetzen lässt wird zuerst alles von der List in einen Array geschrieben
            char[] umlaute = liste1.ToArray();
            foreach (var item in buchstaben)
            {
                //Kommt ein Umlaut so wird dieser durch einen des umlaute Arrays ersetzt (da dieser Array verkehrt herum ist sind somit alle Umlaute wie gewünscht gedreht)
                if (item.Equals('a') || item.Equals('e') || item.Equals('i') || item.Equals('o') || item.Equals('u') || item.Equals('A') || item.Equals('E') || item.Equals('I') || item.Equals('O') || item.Equals('U'))
                {
                    Console.WriteLine(umlaute[position]);
                    position++;
                }
                else
                {
                   Console.WriteLine(item);
                }
            }
        }
    }
}

Kommentare:

JKooP

Punkte: 18090

680 Aufgaben
227 Lösungen
19 Kommentare

#1
22.04.2021 um 19:23 Uhr
Hallo,
warum hast Du 3 mal die gleiche Lösung eingereicht?

Deine Methode liefert schon das richtige Ergebnis, es wäre aber dennoch schöner gewesen, wenn die Ausgabe als Wort nebeneinander gestanden hätte. Außerdem ist Dein Code durch redundante Umwandlungen von Datentypen und Containern recht aufgebläht.
z.B. muss ein String nicht in ein Char-Array umgewandelt werden, da ein String bereits ein optimiertes Char-Array ist.
Ich habe mal ein Refactoring durchgeführt und alles was "unnötig" ist auskommentiert und am Ende den bereinigten Code eingestellt.
Quellcode ausblenden C#-Code
        static void Main(string[] args)
        {
            string s = "trAInyOUrprOgrAmmEr";
            int position = 0;

            List<char> liste1 = new List<char>();
            //char[] buchstaben = s.ToCharArray();

            foreach (var item in s.Reverse())
            //foreach (var item in buchstaben.Reverse())
            {
                if ("AaEeIiOoUu".Contains(item))
                //if (item.Equals('a') || item.Equals('e') || item.Equals('i') || item.Equals('o') || item.Equals('u') || item.Equals('A') || item.Equals('E') || item.Equals('I') || item.Equals('O') || item.Equals('U'))
                {
                    liste1.Add(item);
                }
            }
            //char[] umlaute = liste1.ToArray();
            foreach (var item in s)
            {
                if ("AaEeIiOoUu".Contains(item))
                //if (item.Equals('a') || item.Equals('e') || item.Equals('i') || item.Equals('o') || item.Equals('u') || item.Equals('A') || item.Equals('E') || item.Equals('I') || item.Equals('O') || item.Equals('U'))
                {
                    Console.Write(liste1[position]);
                    //Console.WriteLine(liste1[position]);
                    position++;
                }
                else
                {
                    Console.Write(item);
                    //Console.WriteLine(item);
                }
            }
        }

Quellcode ausblenden C#-Code
static void Main(string[] args)
        {
            string s = "trAInyOUrprOgrAmmEr";
            int position = 0;

            var liste1 = new List<char>();

            foreach (var item in s.Reverse())
                if ("AaEeIiOoUu".Contains(item))
                    liste1.Add(item);

            foreach (var item in s)
                if ("AaEeIiOoUu".Contains(item))
                    Console.Write(liste1[position++]);
                else
                    Console.Write(item);
        }


Gruß JKooP
post_arrow
689 0

dson

Punkte: 640


13 Lösungen
1 Kommentare

#2
25.04.2021 um 08:40 Uhr
Hallo JKooP,

die mehrfache Einreichung, war nicht beabsichtigt.

Ich wusste nicht, dass ich alle Buchstaben, die ich Filtern möchte, auch in einem durchschreiben kann.
Ich werde mir deine Version genauer ansehen und versuchen in Zukunft meinen Code kompakter zu gestallten.
Leider stehe ich noch ganz am Anfang, ich habe erst vor zwei Monaten damit angefangen die Grundlagen zu lernen.

Danke für dein Refactoring.
post_arrow
693 0
Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1800430

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.