C++ :: Aufgabe #330

2 Lösungen Lösungen öffentlich

Text gemäß Vorlage neu sortieren

Anfänger - C++ von JKooP - 12.02.2021 um 09:53 Uhr
Ein durcheinandergeratener Text soll gemäß einer Vorlage (Array) neu sortiert werden.

Dazu soll eine Methode/Funktion erstellt werden, mit der man die Zeichen des
Ausgangstextes gemäß den vorgegebenen Positionen im Array neu anordnet.

Ausgangstext = "programmyourtrainer"

Array = [ 9, 10, 11, 12, 13, 14, 15, 16, 5, 6, 7, 8, 0, 1, 2, 3, 4, 17, 18 ]

Zieltext = "trainyourprogrammer"

Erläuterung:

Das erste Zeichen des Ausgangstextes (p) muss gem. Array an die 9. Position.
Das Zeichen (y) muss an die 5. Position. Achtung: Array ist nullbasiert!

_ _ _ _ _ y _ _ _ p _ _ _ _ _ _ _ _


Viel Spaß

Lösungen:

vote_ok
von felixTheC (1200 Punkte) - 17.02.2021 um 23:50 Uhr
Quellcode ausblenden C-Code
#include <iostream>
#include <vector>

using namespace  std;
void textVorlage(string text, vector<int> arr);

int main()
{
    vector<int> newArr = {9, 10, 11, 12, 13, 14, 15, 16, 5, 6, 7, 8, 0, 1, 2, 3, 4, 17, 18};
    textVorlage("programmyourtrainer", newArr);
    return 0;
}

void textVorlage(string text, vector<int> arr) {
    string holder[size(arr)];
    int counter = 0;

    for (int element : arr) {
        holder[element] = text[counter];
        ++counter;
    }

    for (string element : holder) {
        cout << element;
    }
    cout << '\n';
}

vote_ok
von JKooP (18090 Punkte) - 01.04.2021 um 11:20 Uhr
C++ 17
Quellcode ausblenden C-Code
#include <iostream>
#include <string>
#include <vector>

std::string restore_string(std::string s, std::vector<int> indices)
{
    std::vector<char> arr(indices.size());
    auto k{ 0 };

    for(const auto& i : indices)
        arr[i] = s[k++];

    std::string str(arr.begin(), arr.end());
    return str;
}

int main()
{
    std::string s = "programmyourtrainer";
    std::vector<int> i = { 9, 10, 11, 12, 13, 14, 15, 16, 5, 6, 7, 8, 0, 1, 2, 3, 4, 17, 18 };
    std::cout << restore_string(s, i) << std::endl;
}