Brauche hilfe string replace :S

06/13/2013 11:24 uebertreiber#1
Hi, unzwar habe ich eine Aufgabe,

Legen Sie nun in Ihrem Projekt zwei weitere Dateien an: "stringOperations.h" und
"stringOperations.cpp". In diesen Dateien deklarieren bzw. definieren Sie Funktionen, die den
Umgang mit Strings und der Standard-Library <string> einüben.
a) Erweitern Sie ihr Projekt um eine Funktion mit der Deklaration
int myreplace(string & text, const string &findString,
const string &replaceString);
welche in einem String text alle Vorkommen des Strings findString sucht und diese durch
den String replaceString ersetzt. Die Funktion soll die Anzahl der Ersetzungen mitzählen
und zurückliefern. Die Deklaration der Funktion soll folgendermaßen aussehen:
Testen Sie Ihr Verfahren in einer Funktion namens replaceTest(), die Sie in der Datei
stringOperations.h deklariereren, in der Datei stringOperations.cpp implementieren und aus
Ihrer main-Funktion aufrufen, mit folgenden Strings:

text: Mein schwarzes Auto ist schoen.
findString: schwarz
replaceString: blau

nun hab ich das leider noch nie mit dem string replace gemacht, wie macht amn das genau ? kann mir da vllt jemand helfen ?
06/13/2013 12:15 Schlüsselbein#2
std::string::find, std::string::replace sind deine Freunde.
06/13/2013 12:17 uebertreiber#3
wie lege ich das denn an ?
brauche nur den ansatz, ab da kann ich dann ausprobieren :S
06/13/2013 12:22 Schlüsselbein#4
Nur weil ich heut n guten Tag:
Code:
#include <iostream>
#include <string>

int my_replace(std::string& input, const std::string& find, const std::string& replace)
{
	int count = 0;
	int pos = 0;

	while((pos = input.find(find, pos)) != std::string::npos)
	{
		++count;
		input.replace(pos, find.length(), replace);
	}
	return count;
}

int main()
{
	std::string test = "Mein schwarzes Auto ist schoen.";
	int i = my_replace(test, "schwarz", "blau");
}
Ist allerdings ungetestet und könnte hier und da n Fehler enthalten.
06/13/2013 13:56 uebertreiber#5
Das ist aber nett vielen dank :) hab mal ne frage, unzwar wurde uns beigebracht, dass man sich das std sparen kann wenn man namespace einfügt, was ist denn jetzt nun besser bzw ist das schlimm wenn man namespace einfügt bzw hat man i.welche nachteile ?
06/13/2013 14:01 Schlüsselbein#6
Quote:
was ist denn jetzt nun besser bzw ist das schlimm wenn man namespace einfügt bzw hat man i.welche nachteile ?
Ja, man hat dadurch Nachteile und es können dadurch Fehler entstehen, die man normalerweise nicht hätte und die u.a. schwer zu finden sein können.

Welche Fehler das sind und warum man auf das using namespace besser verzichtet, kannst du nun selber heraus finden. Zum Programmieren gehlört Eigeninitive (im Forum und auch im übrigen Netz lässt sich genug finden).
06/13/2013 19:23 MrSm!th#7
Wozu eigentlich der algorithm Header? Kann es sein, dass du den einfach aus Prinzip immer einbindest? ;O
06/13/2013 20:06 Schlüsselbein#8
Ich hab n Projekt in VS, in welchem ich einfach hier und da mal n Snippet teste. Da sind dann alle möglichen Header eingebunden und ich war vorher im ziemlichen Stress, als ich das da hingerotzt hab (und hab deswegen vergessen, den Header wieder zu entfernen) :D

Habs editiert, danke.
06/13/2013 22:33 Master674b#9
Benutz boost::algorithm.

Code:
std::string mystring("string blabla ... blablabla");
boost::algorithm::replace_all(mystring, "blabla", "xxx");
06/13/2013 22:37 Schlüsselbein#10
Der Weg ist hier das Ziel. Da es sich wohl um eine Hausaufgabe handelt, soll der TS wahrscheinlich dahinterkommen, wie man sowas implementieren könnte.

Wobei ich nun im Nachhinein zugeben muss, dass es auch nicht gerade vorteilhaft von mir war, ihm einfach eine Lösung hinzuklatschen.