C++ Funktion gesucht

  • Themenstarter Themenstarter Gelöschtes Mitglied 29330
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 29330

Guest
Ich hab eine Aufgabe bekommen bei der mir ein string gegeben wird z.B.

string i = " 4 2 15 3 -1 -10 -3 "

So jetzt hab ich noch int x gegeben in welchem die Anzahl der Elemente im String steht also hier z.B. 7 nun soll ich am Ende eine Ausgabe haben welche Zahl am nächsten an der null liegt hier also -1.


Ich dachte mich ich konvertiere den string in ein vector<int> aber wie?
Und um dass sortieren habe ich mir noch gar keine Gedanken gemacht habt ihr irgendwelche ideen oder funktionen?

Und mit atoi geht es nicht da string mit mehreren Elementen.

Kennt ihr für solche Fälle irgendwelche Funktionen in C++?
 
Sortieren musst du im Prinzip nicht, du willst ja nur ein Element finden. Wenn du doch sortieren musst: std::sort.
Ansonsten gibt es in <algorithm> immer sehr nützliche Funktionen.

Wenn du also die Zahlen in einen vector<int> geparst hast, kannst du std::min_element() aus <algorithm> benutzen, um die Zahl zu finden, die am nächsten zu Null ist.
Das ist gleichbedeutend mit: Die Zahl, die absolut den kleinsten Wert hat.
Kleines Beispiel:
Code:
#include <cassert>
#include <algorithm>
#include <iostream>

using namespace std;

//c++98
bool test(int x, int y)
{
        return abs(x) < abs(y);
}

int main()
{
        vector<int> a{4,2,15,3,-1,-10,-3};
    
        // c++11
        int m = *min_element(a.begin(), a.end(), [](int x, int y){ 
                return abs(x) < abs(y);
        });
        // oder c++98
        int k = *min_element(a.begin(), a.end(), test);

        assert(m == k); 

        cout << "am naechsten zu 0: " << m << endl;

        return 0;
}

Wenn du C++11 zur Verfügung hast, dann würde ich die Version mit dem Lambda empfehlen.
 
Zurück
Oben