Teilstring im Vektor suchen

The_Rave

Mitglied
Ist es möglich in einem Vektor einen Teilstring zu finden? Ich hab bisher folgendes versucht.

Code:
	vector<string> myVector;

	myVector.push_back("Das ist ein test");
	myVector.push_back("Das ist der zweite");
	myVector.push_back("Das ist der dritte");

	vector<string>::iterator Iter;
	vector<string>::iterator pos;

	for ( Iter = myVector.begin() ; Iter != myVector.end() ; Iter++ )
	{
      cout << *Iter << endl;
	  pos=find(myVector.begin() , myVector.end() , "test");
	}

Das Problem ist nun test wird nicht gefunden, sehr wohl aber der ganze String "Das ist ein Test", wenn ich das entsprechend umbaue.

Ich würde eigentlich auch gerne eine Position herausbekommen von der ich ausgehend vom Suchwort weiter rechnen kann und andere Strings die ich vorher nicht kenne kopieren kann. Dazu habe ich allerdings überhaupt noch nichts gefunden. Daß ich weiß daß er da ist reicht mir also nicht

Bis jetzt habe ich den Eindruck das Vektoren nicht dafür geeignet sind und ich das besser mit einem String Array machen sollte. Oder hat noch jemand eine bessere Idee? Vektoren fand ich ganz gut wegen der Dynamisierung und dem einfügen neuer Werte.
 
Hi.
Das Problem ist nun test wird nicht gefunden, sehr wohl aber der ganze String "Das ist ein Test", wenn ich das entsprechend umbaue.
Das Problem ist, dass du den Vektor "doppelt" durchsuchst. Um einen Substring in einem Vektor von Strings zu finden, müßtest du eigentlich den Vektor durchgehen und jeden String überprüfen.
C++:
for ( Iter = myVector.begin(), end = myVector.end() ; Iter != end ; ++Iter )
{
    cout << *Iter << endl;
    string::size_type pos = Iter->find("test");
}
Bis jetzt habe ich den Eindruck das Vektoren nicht dafür geeignet sind und ich das besser mit einem String Array machen sollte. Oder hat noch jemand eine bessere Idee? Vektoren fand ich ganz gut wegen der Dynamisierung und dem einfügen neuer Werte.
Vektoren lassen sich doch genauso wie Arrays verwenden; ich sehe für die Aufgabe keinen Grund nicht einen Vektor zu verwenden.

Gruß
 
Dankeschön, jetzt funktioniert es.

Ja mit der doppelten Suche meintest du wohl das begin() und end() in meiner For Schleife und der find() funktion?

Das war eigentlich noch vom rumprobieren mit dem zweidimensionalen Vektor. Der hat ja nicht nur Zeilen sondern auch Spalten und dafür war die For Schleife eigentlich...Hab aber schnell gemerkt daß ich so nicht weiterkomme und mich an den einfachen Vektor gehalten. Klappte leider nicht besser.

Naja mit dem "Das ist ein Test" funktionierte das ja auch.Das eigentliche Problem war aber nicht die "doppelte" Suche, sondern "->" und um die Find() zum laufen zu bringen musste ich algorithm includieren. Sonst hieß es immer "find is not member of vector....." Das war dann wohl die falsche find() Funktion. Die konnte wohl nicht den Vektor durchgehen sondern nur als ganzes identifizieren. Oder was die sonst macht...

Der "->" war genau das was mir fehlte und jetzt kann ich auch die richtige find() nutzen und den Vektor selber durchsuchen.

Das Problem war, daß ich viel im Inet gesucht hab um ein entsprechendes Beispiel zu finden. Aber ziemlich erfolglos. Dann fragt man sich langsam ob das überhaupt geht.

Hier nochmal die Suche im zweidimensionalen Vektor.

Code:
       //Iterator auf den Start des Vektors setzen
	vector<vector<string> >::iterator iterLine = myVector.begin(); 
	
	//Für jede Zeile des Vekors einen neuen Durchgang
	for( ; iterLine!= myVector.end(); )
	{
		//Iterator auf den Anfang der ersten Spalte der Zeile setzen
		vector<string>::iterator iterRow = (*iterLine).begin();
		
		string::size_type pos = iterRow->find("test");
		
		//Label und Value ausgeben
		while(iterRow!= (*iterLine).end())
		cout << *iterRow++;
		cout << endl;
		
		//nächste Zeile
		//nicht im Head setzen
		iterLine++;
	}

Gruß
 
Zuletzt bearbeitet:
Zurück