Strings zerlegen. Wie?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Ma_No
Beiträge: 22
Registriert: 13.04.2013, 22:16
Benutzertext: Noch am Anfang. :)
Echter Name: Matthias Nowottnick

Strings zerlegen. Wie?

Beitrag 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.
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Strings zerlegen. Wie?

Beitrag 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?
Ma_No
Beiträge: 22
Registriert: 13.04.2013, 22:16
Benutzertext: Noch am Anfang. :)
Echter Name: Matthias Nowottnick

Re: Strings zerlegen. Wie?

Beitrag von Ma_No »

Achso ja ich benutze C++ und demnach hab ich die Stringklasse.^^
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Strings zerlegen. Wie?

Beitrag 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?
Benutzeravatar
Schrompf
Moderator
Beiträge: 5044
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Strings zerlegen. Wie?

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Ma_No
Beiträge: 22
Registriert: 13.04.2013, 22:16
Benutzertext: Noch am Anfang. :)
Echter Name: Matthias Nowottnick

Re: Strings zerlegen. Wie?

Beitrag von Ma_No »

Ok also ich benutze std::string und die Methode mit substr klingt gut das guck ich mir mal an.
Benutzeravatar
joeydee
Establishment
Beiträge: 1122
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Strings zerlegen. Wie?

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5044
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Strings zerlegen. Wie?

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: Strings zerlegen. Wie?

Beitrag 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.
Zuletzt geändert von mnemonix am 07.06.2013, 16:16, insgesamt 2-mal geändert.
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: Strings zerlegen. Wie?

Beitrag 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);
Benutzeravatar
dot
Establishment
Beiträge: 1745
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Strings zerlegen. Wie?

Beitrag von dot »

Schrompf hat geschrieben:Übergib doch einfach ein Array aus Strings an die Funktion [...]
this
hagbard
Beiträge: 66
Registriert: 05.08.2010, 23:54

Re: Strings zerlegen. Wie?

Beitrag von hagbard »

Falls du boost nutzt gibt es dort in boost::algorithm eine Split() Methode.
Antworten