Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

String mit Leerzeichen aufteilen C++/Linux

Dady / 2 Antworten / Baumansicht Nickles

Hi,

bin etwas neu im Umgang mit C++ und Linux. Ich möchte einen String oder besser ein char Array auslesen und die einzelnen Stringteile in neue char* schreiben.

Als Beispiel:
char* data //data = "Node /home/wasauchimmer/datei.txt"
char* Definition // Definition = "Node"
char* Datei // Datei = "/home/wasauchimmer/datei.txt"

Dabei kann Definition oder Datei natürlich unterschiedliche Längen haben. Das Trennzeichen kann ich selber definieren, ist aber per Default ein Leerzeichen.
Kann mir jemand ein paar Tipps geben, wie ich hier am Besten anfange.

Gruß und Dank

Jeder weiss, dass es niemand war!
bei Antwort benachrichtigen
mr.escape Dady „String mit Leerzeichen aufteilen C++/Linux“
Optionen

Du kannst zeichenketten, die per char* referenziert werden nicht einfach aufteilen, weil die entsprechende speicherzuweisung das u.u. nicht zulässt (z.b. konstante zeichenketten).
Verwende stattdessen die klasse string aus der "C++ Standard Library". Dort kannst du dann mit find() und substr() die zerteilung in neue strings einfach vornehmen und kannst gleichzeitig die speicherverwaltung vergessen.

Z.b.:
#include <string>
std::string data="Node /home/wasauchimmer/datei.txt";
int i=data.find(' ');
if(i>=0){
  std::string Definition=data.substr(0, i);
  std::string Datei=data.substr(i+1);
  printf("Definition: %s\n", Definition.c_str());
  printf("Datei: %s\n", Datei.c_str());
}


mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Dady mr.escape „Du kannst zeichenketten, die per char referenziert werden nicht einfach...“
Optionen

Ich danke Dir für die Information. Ich werde es so machen wie DU geschrieben hast, sonst handle ich mir wohl mehr Probleme ein, als ich brauch.

Gruß und Dank

Jeder weiss, dass es niemand war!
bei Antwort benachrichtigen