Inhalt eines Array umdrehen
-
Hallo wiedermal,
also ich habe folgendes vor. Der user gibt eine bestimmte anzahl von Zahlen in ein Array ein.Nachdem die zahlen eingegeben wurden soll der inhalt umgedreht werden, das heißt was an letzer stelle ist soll nach vorne usw... nur leider habe ich nichts passendes gefunden. Kann mir da einer Helfen, ich weiß nämlich net wie ich da rangehen soll??
-
Hi,
std::reverse(array,array+size);
Oder selber manuell in ner Schleife
-
ok alles klar muss ich da irgendeine Lib mit includen oder geht das einfach so??
-
Ist Teil der STL (namespace std ...) und liegt im Header algorithm ...
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<std::size_t> items; for (std::size_t i = 0; i < 10; ++i) { items.push_back(i + 1); std::cout << (i + 1) << std::endl; } std::reverse(items.begin(), items.end()); for (std::size_t i = 0; i < items.size(); ++i) std::cout << i << std::endl; }
... das sollte gehen (hab es nicht getestet ...)
-
(D)Evil schrieb:
for (std::size_t i = 0; i < items.size(); ++i) std::cout << i << std::endl; }
==>
for (std::size_t i = 0; i < items.size(); ++i) std::cout << items[i] << std::endl; }
(D)Evil schrieb:
hab es nicht getestet ...
-
ich hab nämlich folgendes vor, ich will das der user eine dualzahl eintippt meinetwegen 110101 und der PC dann die normale Zahl also 53 ausrechnet, nur wie ich mitbekommen habe, muss man dazu die Zahl umdrehen und von hinten anfangen zu rechnen, daher wollte ich fragen ob es doch eher günstiger is mit einem vector zu arbeiten oder ein array??
-
#include <bitset> #include <iostream> int main(...) { std::bitset dualZahl; std::cin >> dualZahl; std::cout << dualZahl.ulong_value(); //oder so ähnlich }
-
so ich habe mal folgendes probiert, jedoch kommt da immer ein fehler.bzw ich weiß nichma ob man das so überhaupt machen kann... bitte um aufklärung wenns net richtig ist.
#include<iostream> #include<algorithm> using namespace std; int main() { int zahl,zahl2; cout<<"Bitte geben sie eine Zahl ein"<<endl; cin>>zahl; while(zahl >> zahl2) { reverse(zahl2.begin(),zahl2.end()); cout<<zahl2<<endl; } }
EDIT:es kommt immer der fehler das "begin" und "end " nicht deklariert wurden.
-
Hmm am einfachsten machst de das mit nem String
#include <cmath> std::size_t bin_to_dec(const std::size_t& num) { /* Zahl in String packen ... */ std::stringstream ss; ss << num; std::string string_num = ss.str(); std::size_t cur = 0; // Wird die momentane Zahl gespeichert std::size_t len = string_num.length(); // Anzahl der Stellen der Zahl std::size_t num_pos = 0; // Zahl an dieser Stelle for (std::size_t pos = 0; pos < len; ++pos) { if (string_num[pos] != '0' && string_num[pos] != '1') return 0; ss.clear(); // stringstream leeren ... und failbits clearen ... ss.str(""); ss << string_num[pos]; // das char für den zahl an der stelle rein in den stream packen ss >> num_pos; // und als Zahl wieder rausholen ... cur += std::pow(2.0, static_cast<int>((len - 1) - pos)) * num_pos; // hmm ... man multipliziert die Ziffer (1 oder 0) mit 2 hoch (ziffern von hinten - 1) und feddisch ^^ guck dazu mal wikipedia.de an ... wird dann nur noch zu der momentanen Zahl hinzu addiert ... } return cur; }
-
ok mit einem string ist es natürlich einfacher, aber könntest du mal bitte deinen code kommentieren, mir sind da einige Snipptes nich so ganz klar
*rotwerd*
danke
-
Hoffe das reicht an Erklärung