PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Wie richtig Strings schneiden, überprüfen usw.?



Sid
12-09-2005, 17:55
Hallo,
da ich in letzter Zeit ein wenig C++ lern hab ich immer mehr das Problem, dass ich darin irgendwelche Strings manipulieren muss. Also zerschneiden (z.b. auslesen aus einer Datei, nach leerzeichen in einzellne Strings packen) die dann überprüfen, ob sie Zahlen sind usw (gibts da was womit ich die per regexp überprüfen kann) und so sachen halt.
Jetzt fehlt mir da nur eine gute Anleitung dazu, wie ich das mache, ich hab schon länger gesucht, allerdings noch nicht so wirklich was gutes gefunden.

Kann mir da wer eine gute Seite empfehlen?

Danke,
Sid

`kk
12-09-2005, 18:38
Noe.. aber was brauchst du konkret?
Wenn du sowas wie explode bei php suchst, guck halt in die PHP-Sourcen.

Ist zwar C, sollte aber umso leichter nachzubauen sein.

Gruß
Kai

Sid
12-09-2005, 18:56
Nunja, ich will halt da mal die Grundlagen lernen da ich mich da noch ziemlich schwer tu, bzw. halt das ganze sehr hässlich programmier ;)
Ich wollt halt richtig Dateien auslesen... Also auch überprüfen ob die Werte die da drinstehen ungefähr hinkommen. Und das halt ohne Qt, damit könnt ichs mittlerweile einigermaßen.

Und ich wollt das eigentlich mit der String klasse machen, von daher hilft mir da c recht wenig.

anda_skoa
12-09-2005, 19:52
Nach Leerzeichen in einzeln Strings zerlegen ist sehr einfach, weil Leerzeichen das Standardtrennzeichen ist.

Wenn du also mit >> variable aus einer Datei liest, bekommst du immer da nächste Wort.

Oder du liest zuerst eine Zeile und dann mit einem stringstream daraus die Wörter.

Bzw such mal nach der Boost Bibliothek, dort gibt es jede Menge nützliche Klasse, Templates und Algorithmen

Ciao,
_

`kk
12-09-2005, 20:44
Und ich wollt das eigentlich mit der String klasse machen, von daher hilft mir da c recht wenig.
Ich kann lesen. Trotzdem danke, dass du's nochmal erwaehnst.
Kannst du's? ;)

Nochmal, vielleicht leichter, verstaendlich:
Du kannst das "explode" von PHP ganz einfach in C++ schreiben.
Auch mit std::string. Und geht sogar leichter als in C. Versuch's einfach mal.

Sid
12-09-2005, 22:09
Hmm, ich denke, irgendwie reden wir aneinander vorbei ;)

Ich muss sagen, ich kann weder php, noch weiß ich was explode macht...
Ich wollt auch eher was fertiges, das ganze ist schon groß genug. Und halt irgendwie eine kleine Einführung zu den ganzen Stringmanipulationen, wie man das richtig macht. Bisher hab ich mir noch immer irgendwas, und das funktioniert dann halt mehr oder weniger, ist aber oft ziemlich lang bzw. sicher unnötig kompliziert.

Danke für das mit dem stringstream, das schau ich mir mal an, dann kann ich den code etwas besser machen. Bisher such ich noch mit find mach dem leerzeichen.

Aber eine konkrete Frage hab ich: Wie schau ich nach, ob sich ein String problemlos nach int konvertieren lässt (mach ich mit atoi)? Ich würds ja per regexp machen, aber ich hab noch nichts in den standardlibs dazu gefunden und ich will nicht unbedingt noch was extra benutzen.

`kk
12-09-2005, 22:37
Du wirst doch wohl ne Funktion von C nach C++ "portieren" koennen. ;)

explode: http://www.php.net/manual/de/function.explode.php

anda_skoa
12-09-2005, 23:08
#include <iostream>
#include <string>
#include <sstream>

using std::string;
using std::stringstream;
using std::cout;
using std::endl;

int string2int(const string& text, bool& ok)
{
stringstream stream;
stream << text;

int number = 0;
stream >> number;

ok = !stream.fail() && stream.eof();

return number;
}

int main(int argc, char** argv)
{
for (int i = 1; i < argc; ++i)
{
bool ok;
cout << "input: '" << argv[i] << "' -> number: "
<< string2int(string(argv[i]), ok);
cout << " (" << (ok ? "ok" : "not ok") << ")" << endl;
}

return 0;
}


Ciao,
_