PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ und die Strings



fs111
17-05-2002, 08:07
Hallo liebe mitleser!

ICh habe ein Problem und zwar muss ich folgende Aufgabe für die Uni in C++ lösen (ist eine Einstiegsveranstaltung).

Erweitern Sie ihr ZeigerProjekt aus Aufgabe 1 um eine Funktion replace, welche in einem String text alle Vorkommen des Strings findString sucht und diese durch den String replaceString ersetzt. Die Funktion soll die Ersetzungen mitzählen und zurückliefern. Die Deklaration der Funktion soll also folgendermaßen aussehen:

int replace(char* text, char*findString, char* replaceString);

Testen Sie Ihr Verfahren mit folgenden Strings:
"text: Mein schwarzes Auto ist schoen.
findString: schwarz replaceString: blau

"text: Mein blaues Auto und mein blaues Motorrad sind schoen.
findString: blau replaceString: schwarz

"text: Mein rotes Auto ist schoen.
findString: rot replaceString: gruen-rot

Das ganze soll dem Einüben von Zeigern dienen, aber leider habe ich das Konzept noch nicht ganz verstanden. Wie würdet ihr an diese Aufgabe herangehen? ICh habe ehrlich gesagt nicht wirklich eine Idee, wel ich den Umgang mit Strings in C++ etwas komisch finde.

Grüße fs111

anda_skoa
17-05-2002, 10:57
Original geschrieben von fs111
ICh habe ehrlich gesagt nicht wirklich eine Idee, wel ich den Umgang mit Strings in C++ etwas komisch finde.


Naja, das ist ja auch nicht C++, sondern C. In C++ würde man für Stings den Typ (die Klasse) string verwenden.

Wenn die mit char Arrays arbeitest, kannst du es so machen:


int textLen = strlen(text);
int textIndex;
int findIndex;

for (textIndex = 0; textIndex < textLen; ++textIndex)
{
findIndex = 0;
while (findIndex < strlen(findString) && (textIndex+findIndex) < textLen &&
text[textIndex+findIndex] == findString[findIndex])
{
findIndex++;
}
if (findIndex == strlen(findString)
{
// gefunden
// jetzt mußt du ersetzen.
}
}


Hab das jetzt nicht getestet, aber ich hoffe es hilft dir weiter.

Ciao,
_

Vir@s
17-05-2002, 15:33
Steht hier nicht irgendwo, er soll es mit Pointern machen und nicht mit arrays? :)

Außerdem in C++ würde man erst Recht Zeiger verwenden und ned unbedingt gleich ne eigene Klasse erzeugen....

Mfg, Vir@s

fs111
17-05-2002, 16:27
OK, wir habe es uns jetzt so hingefrickelt, mit einer Mischung aus Strings chars und pointern.

Es renn auf jeden Fall, und das ist gut so.

Danke und Grüße fs111

anda_skoa
18-05-2002, 12:20
Original geschrieben von Vir@s
Steht hier nicht irgendwo, er soll es mit Pointern machen und nicht mit arrays? :)


Seit wann ist da ein Unterschied? :)
Ob ich jetzt pointer++ mache oder index++ kommt auf das selbe raus, mit dem Unterschied, dassich im zweiten Fall imemr noch den Poinetr auf den Anfang des Arrays habe.

Außerdem ist Pointerarithmetik meiner Meinung nach nicht so leicht lesbar.



Außerdem in C++ würde man erst Recht Zeiger verwenden und ned unbedingt gleich ne eigene Klasse erzeugen....


Was heißt da erzeugen? :confused:

Die Standard Stringklasse hat sogar eine replace Methode.

Ciao,
_

Vir@s
21-05-2002, 22:36
Original geschrieben von anda_skoa


Seit wann ist da ein Unterschied? :)
Ob ich jetzt pointer++ mache oder index++ kommt auf das selbe raus, mit dem Unterschied, dassich im zweiten Fall imemr noch den Poinetr auf den Anfang des Arrays habe.

Außerdem ist Pointerarithmetik meiner Meinung nach nicht so leicht lesbar.



Was heißt da erzeugen? :confused:

Die Standard Stringklasse hat sogar eine replace Methode.

Ciao,
_

Da is ein Riesenunterschied. Arrays und Pointer sind insofern komplett anderst, da Pointer Dynamisch sind und Arrays ganz sicher nicht :)

Ganz zu schweigen von dem Geschwindigkeits-Aspekt. Um ein Array zu durchsuchen brauch man "Jahre", bei Pointern geht des Ruck-Zuck.

Sorry, des mit der Klasse hab ich missverstanden, dachte du willst nur für sowas gleich nen eigenen Datentyp basteln :)

anda_skoa
22-05-2002, 09:56
Original geschrieben von Vir@s
Da is ein Riesenunterschied. Arrays und Pointer sind insofern komplett anderst, da Pointer Dynamisch sind und Arrays ganz sicher nicht :)


Ja, schon, aber erstens kannst du einen Array genauso am heap anlegen und zweitens ist kein Unterschied, ob du die Elemente eines Arrays mit ihren Index ansprichst oder über den Pointer auf das Element.

Sieht man ja sehr schon bei char*


char name[10];
char* pName = &name;

pName[0] ist dann equivalent zu name[0]



Ganz zu schweigen von dem Geschwindigkeits-Aspekt. Um ein Array zu durchsuchen brauch man "Jahre", bei Pointern geht des Ruck-Zuck.


Das mußt du mir jetzt bitte erklären :confused:
Meines Wissens ist das Zeitverhalten beim Suchen in einer verketteten Liste linear und bei einem Array ebenso.

Aber anisich führt der Vergleich zu nichts.
Pointer sind eine Adressierungsart, Arrays eine Datenstruktur.



Sorry, des mit der Klasse hab ich missverstanden, dachte du willst nur für sowas gleich nen eigenen Datentyp basteln :)

:D
Frpher hab ich sowas gemacht, heutzutage gibt es Gott sei Dank genug C++ Bibliotheken, die feine Stringklassen enthalten.
Unter anderem eben die Standardbibliothek.

Ciao,
_