C++ :: Aufgabe #359

1 Lösung Lösung öffentlich

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ß

Lösungen:

vote_ok
von JKooP (18090 Punkte) - 22.04.2021 um 20:57 Uhr
C++ 17
Quellcode ausblenden C-Code
#include "vowels.h"

int main()
{
    string s{ "trAInyOUrprOgrAmmEr" };
    vowels v{ s };
    cout << v.reverse_vowels(s) << endl;
}

.h
Quellcode ausblenden C-Code
#pragma once
#include <iostream>
#include <vector>
#include <string>
using namespace std;

class vowels
{
private:
	string str_;
public:
	vowels(string str) :str_{ str } {}
	string reverse_vowels(string);
};

.cpp
Quellcode ausblenden C-Code
#include "vowels.h"

string vowels::reverse_vowels(string s)
{
    vector<char> v1{ 'A','a','E','e','I','i','O','o','U','u' }, v2, v3;
    auto p{ 0 };

    for (auto i = (str_.length() -1); i > 0 ; i--)
        if (find(v1.begin(), v1.end(), str_[i]) != v1.end())
            v2.push_back(str_[i]);

    for (const auto& i : str_)
        v3.push_back(find(v1.begin(), v1.end(), i) != v1.end() ? v2[p++] : i);

    string ns(v3.begin(), v3.end());
    return ns;
}