PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu den String-Funktionen von c++



webfreak
25-06-2007, 14:08
Hallo Leute!

Ich habe einen string.
Davon möchte ich herausfinden, ob das letzte zeichen ein \ ist. wie geht das.?
dann möchte ich alle / zu \ ersetzen.

Das ist für WINDOWS:

Zettt
25-06-2007, 15:48
Da gibt's doch sicher irgendwelche Methoden und Funktionen die dich per regulaerem Ausdruck (regular Expression, RegEx) an dein Ziel bringen?
Kenn mich zwar mit C++ nicht so aus aber das waere jetzt mal zumindest mein Tipp fuer die naechste Google Suche...

Donnerfalke
26-06-2007, 20:46
Guten Abend,
erstmal hallo an alle. Ist mein erster Beitrag hier :)

Du kannst unter C++ auf einen String wie auf ein Array zugreifen. Du musst also nur wissen wie lang der String ist. Das findest du mit string.length() heraus. Dann kannst du mit beispielsweise


if(string[string.length()-1) == '\\')
{
// Dein Code
}
überprüfen, ob das letzte Zeichen ein Backslash ist. Mit dem "-1" bin ich mir gerade nicht 100% sicher, aber ich glaube schon, dass es nötig ist. Schreiben lässt sich mit dem Zugriff über den Index allerdings nicht. Für das Ersetzen von den normalen Slashs solltest du den String mit einer for-Schleife durchlaufen Zum ersetzen kannst du dann string.replace() benutzen. Die Position haste ja durch dein Laufvariable in der Schleife.

Gruß
Michi

BLUESCREEN3D
27-06-2007, 13:52
erstmal hallo an alle. Ist mein erster Beitrag hier :)
Na dann erstmal herzlich willkommen :D
Muss deinen ersten Post leider gleich auseinandernehmen:


Mit dem "-1" bin ich mir gerade nicht 100% sicher, aber ich glaube schon, dass es nötig ist.
Ja, ist es.


Schreiben lässt sich mit dem Zugriff über den Index allerdings nicht.
Doch, das geht auch:

string s="xyz";
s[0]='X';
s.at(1)='Y'; //sogar das geht, da at() eine Referenz zurückgibt

//kann man auch so ausprobieren:
char &referenz=s.at(2);
referenz='Z'; //hier wird s geändert.


Wenn man zwischen der vorletzen und letzten Zeile den Inhalt von s ändert, geht es nicht mehr.
Weiß jemand, was dann geändert wird? Das dürfte ja irgendein anderer Speicherbereich sein O.o
edit: Ja, das gibt schnell ein "Segmentation fault". Muss man also mit aufpassen.

Donnerfalke
27-06-2007, 20:34
Doch, das geht auch

Stimmt, nach nochmaligem ausprobieren muss ich dir Recht geben. Hab mir eingebildet, dass es nicht gehen würde. Und nach genauerem Überlegen muss ich feststellen, dass es C# war, wo es nicht geht.

oxe1976
10-07-2007, 08:06
Letztes Zeichen '\':



std::string s ....;
if(s.length() > 0 && s[s.length()-1] == '\\') {
// jo, letzter char ist ein backslash
}


'\' durch '/' ersetzen:



class ChangeChar {
char from;
char to;
public:
ChangeChar (char pfrom, char pto) : from(pfrom), to(pto) {}
char operator() (char c) { return ((c==from) ? to : c); }
};

...

std::string s ....;
...
std::transform(s.begin(), s.end(), s.begin(), ChangeChar('\', '/'));