Seite 1 von 1

Strings zerlegen. Wie?

Verfasst: 02.06.2013, 18:52
von Ma_No
Guten Abend.
Ich hätte eine Frage zu den Strings.
Undzwar wüsste ich gerne wie ich Strings in einzelne teile Teile "zerschneide".
Ich möchte als Parameter meiner Funktion einen String übergeben und diesen für ein "Dropdownmenü" benutzen also z.B.:
"Neu, bearbeiten, löschen" in Neu, Bearbeiten und löschen unterteilen also 3 Buttons somit eine Art variabler Parameter.
Ich hoffe ich habe mein Problem gut genug geschildert und hoffe auf baldige Hilfe.

Re: Strings zerlegen. Wie?

Verfasst: 02.06.2013, 18:59
von Ingrater
Welche Programmiersprache benutzt du? Benutzt du irgend eine Art von eigener Stringklasse oder eine Standardimplementierung? Was verwendest du als GUI library? Hat dein GUI library eine eigene Stringklasse?

Re: Strings zerlegen. Wie?

Verfasst: 02.06.2013, 19:01
von Ma_No
Achso ja ich benutze C++ und demnach hab ich die Stringklasse.^^

Re: Strings zerlegen. Wie?

Verfasst: 02.06.2013, 19:25
von Ingrater
Ja welche? std::string oder QTString? Marke Eigenbau? Ein bisschen mehr informationen bitte. Speichert deine String-Klasse die länge des strings, oder muss er nullterminiert sein, oder beides?

Re: Strings zerlegen. Wie?

Verfasst: 02.06.2013, 19:29
von Schrompf
Übergib doch einfach ein Array aus Strings an die Funktion, also die Menüpunkte bereits einzeln.

std::string vorausgesetzt, könntest Du ansonsten eine kleine while-Schleife aufmachen, mit std::string::find() jeweils das nächste Trennzeichen suchen und mittels std::string::substr() den Teil bis dahin extrahieren.

Re: Strings zerlegen. Wie?

Verfasst: 02.06.2013, 19:55
von Ma_No
Ok also ich benutze std::string und die Methode mit substr klingt gut das guck ich mir mal an.

Re: Strings zerlegen. Wie?

Verfasst: 06.06.2013, 11:17
von joeydee
In JS und Verwandten gibt es die Methode String.split(delimiter:String):Array für genau diesen Zweck - vielleicht findest du ja eine C++-Implementierung unter diesem Stichwort.

Re: Strings zerlegen. Wie?

Verfasst: 06.06.2013, 11:45
von Schrompf
Für alte C-Stil-Zeichenketten gibt es strtok(). Aber schön ist das nicht. Aufgrund der Art der Fragestellung vermute ich, dass Ma_No noch nicht so sattelfest in allen C/C++-Details ist, und alte C-Strings würden dieses Detail-Wissen ziemlich belasten.

Dann schon besser string::find() in einer while-Schleife.

Re: Strings zerlegen. Wie?

Verfasst: 06.06.2013, 14:26
von mnemonix
Hier ein kleiner Vorschlag:

Code: Alles auswählen

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

std::vector<std::string> split(std::string const &str, char delimiter)
{
  std::istringstream ss(str);
  std::vector<std::string> tokens;

  while (ss.good())
  {
    std::string token;
    std::getline(ss, token, delimiter);
    tokens.push_back(std::move(token));
  }

  return tokens;
}

int main(int argc, char *argv[])
{
  auto tokens = split("foo,bar,blubb,moo", ',');

  for (auto const &t : tokens)
    std::cout << t << std::endl;

  return 0;
}
Nachtrag: tokens.push_back(token); in tokens.push_back(std::move(token)); geändert, da token lokal nicht mehr genutzt wird und der Besitzerwechsel wohl effizienter sein sollte als eine Kopie.

Re: Strings zerlegen. Wie?

Verfasst: 06.06.2013, 19:15
von Dummie
mnemonix hat geschrieben:Hier ein kleiner Vorschlag:

Code: Alles auswählen

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

std::vector<std::string> split(std::string const &str, char delimiter)
{
  std::istringstream ss(str);
  std::vector<std::string> tokens;

  while (ss.good())
  {
    std::string token;
    std::getline(ss, token, delimiter);
    tokens.push_back(token);
  }

  return tokens;
}

int main(int argc, char *argv[])
{
  auto tokens = split("foo,bar,blubb,moo", ',');

  for (auto const &t : tokens)
    std::cout << t << std::endl;

  return 0;
}
Schöner ist es so:

Code: Alles auswählen

while (std::getline(ss, token, delimiter))
        tokens.push_back(token);

Re: Strings zerlegen. Wie?

Verfasst: 07.06.2013, 10:57
von dot
Schrompf hat geschrieben:Übergib doch einfach ein Array aus Strings an die Funktion [...]
this

Re: Strings zerlegen. Wie?

Verfasst: 07.06.2013, 20:47
von hagbard
Falls du boost nutzt gibt es dort in boost::algorithm eine Split() Methode.