einen bestimmten string in einem iterator finden?
-
moin, ich würd gern mal wissen ob mir jemand hier weiterhelfen kann:
das problem ist wohl, dass ich einen iterator in einen string wandeln muss das suchen in diesem strinf wird das leicheter sein
hier mal mein ansatz:#include <iostream> #include <stdlib.h> #include <vector> #include <string> #include <sstream> using namespace std; int main() { vector<int> vek; //vektor<string> str; string s; ostringstream os; for(int x=1;x<=100;x++) vek.push_back(x); for(vector<int>::iterator i=vek.begin();i != vek.end();i++) { os << *i; s = os.str(); //soll alle zahlen nur ausgeben die durch 3 teilbar sind und eine 3 enthalten if(*i%3 == 0 || s.find("3",0)) cout<<*i<<endl; } }
-
das problem ist wohl, dass ich einen iterator in einen string wandeln muss das suchen in diesem strinf wird das leicheter sein
hier mal mein ansatz:Geht's auch auf Deutsch?
-
Kóyaánasqatsi schrieb:
das problem ist wohl, dass ich einen iterator in einen string wandeln muss das suchen in diesem strinf wird das leicheter sein
hier mal mein ansatz:Geht's auch auf Deutsch?
Das dachte ich mir eben auch..
Ich frage mich, warum Leute, die Hilfe wollen es nicht schaffen in verständlichem Deutsch zu schreiben..
-
ich möchte den Iterator *i in einen string konvertieren, um später mit einem string s arbeiten zu können..
deutsch genug? :p
-
Geht doch. Obwohl ich annehme, dass du nicht den Iterator in einen string umwandeln möchtest, sondern dessen Inhalt.

Dann wäre es auch hilfreich, wenn du beschreibst, wo genau dein Problem liegt. Dein Ansatz sieht nämlich nicht schlecht aus..
Probiers mal so:
int main() { vector<int> vek; //vektor<string> str; string s; stringstream ss; for(int x=1;x<=100;x++) vek.push_back(x); for(vector<int>::iterator i=vek.begin();i != vek.end();i++) { ss << *i; ss >> s; //soll alle zahlen nur ausgeben die durch 3 teilbar sind und eine 3 enthalten if(*i%3 == 0 || s.find("3",0)) cout<<*i<<endl; } }
-
drakon schrieb:
Geht doch. Obwohl ich annehme, dass du nicht den Iterator in einen string umwandeln möchtest, sondern dessen Inhalt.

Dann wäre es auch hilfreich, wenn du beschreibst, wo genau dein Problem liegt. Dein Ansatz sieht nämlich nicht schlecht aus..
Probiers mal so:
int main() { vector<int> vek; //vektor<string> str; string s; stringstream ss; for(int x=1;x<=100;x++) vek.push_back(x); for(vector<int>::iterator i=vek.begin();i != vek.end();i++) { ss << *i; ss >> s; //soll alle zahlen nur ausgeben die durch 3 teilbar sind und eine 3 enthalten if(*i%3 == 0 || s.find("3",0)) cout<<*i<<endl; } }ok danke schonma... habs ma ausprbiert.. leider hat nun s konstant den wert 1 in der schleife und es werden 100 einsen ausgegeben

-
formulier doch ma pls in paar mehr sätzen, was du wirklich vor hast...
mit mir sinds schon 3, die nicht verstehen, was du meintest ^^
mach vll einfach ma nen bsp...
bb
-
So solltest du (glaube ich zumindest) das Ergebnis erhalten, dass du haben möchtest. Ich habe alle kleinen Änderungen an deinem Code mit Kommentaren versehen:
#include <iostream> #include <vector> #include <string> #include <sstream> int main() { std::vector<int> vek; std::string s; std::stringstream ss; for(int x = 1; x <= 100; x++) vek.push_back(x); for(std::vector<int>::iterator i = vek.begin(); i != vek.end(); i++) { ss << *i; s = ss.str(); // UND Verknüpfung und prüfen ob find() eine Übereinstimmung im String fand // (bei keiner Übereinstimmung gibt er den Wert "npos" zurück, ein Wert // der größer als jeder gültige Index des Strings ist) if(*i % 3 == 0 && s.find("3") != s.npos) std::cout << *i << std::endl; // Dem stringstream einen leeren String übergeben, um so den Stream // selbst zu "leeren" ss.str(""); } return 0; }
-
Das Problem ist der stringstream. Der ist nicht mehr frisch

Das einfachste ist ihn einfach erst in der Schleife zu erstellen:for(vector<int>::iterator i=vek.begin();i != vek.end();i++) { ostringstream ss; int num = *i; ss << num; string s = ss.str(); if(num%3 == 0) cout << s << endl; }Ob das langsamer ist als den String zu löschen? K.A.

B.T.W warum geht das eigentlich nicht mittels ss.clear() && ss.flush()? Warum muss das ein ss.str("") sein?
-
Mit ss.clear() kann man nur die Fehlerflags des Streams ändern, nicht jedoch den Inhalt des selbigen. Zu ss.flush() kann ich dir aber leider auch nichts sagen :(.
-
Hier aus dem Netz zu flush:
clear(), geerbt von std::ios, löscht die Fehlerflags. flush() führt alle gepufferten Output-Stream-Operationen aus. Ich denke, du suchst Temp.str("").