String nach Zeichen untersuchen
-
Ich habe einen String. Die Inhalte sind mit ";" getrennt.
Bsp.: "1;2;3"
Ich möchte nun die Zeichen 1 und 2 und 3 in Variablen speichern. Dazu muss ich
das ";" im String erkennen und die Zahlen zuordnen.Also:
"1;2;3" -> double a=1 double b=2 double c=3
Das gleiche möchte ich dann auch noch für
"A;B;C" -> string a=A string b=C string c=C
machen. Hat jemand einen Tipp?
Vielen Dank.
-
- mit regulären ausdrücken geht so etwas sehr schön...
- dort kannst du bereiche mit "(" und ")" setzen und diese dann in variablen legen... das geht sogar mit std::regex ohne probleme...
- hier ein link:
http://www.cplusplus.com/reference/regex/regex_match/ganz unten im beispiel "matcht" er auf sub... dort nimmst du einfach ein operator für zahlen... dann teilst du diese noch in bereiche und diese dann in variablen...
falls regex_match dir nicht funktional reicht -> siehe regex_search...
http://www.cplusplus.com/reference/regex/regex_search/dann nutz regex_search dort kannst du gezielt nach zahlen bis ";" suchen... diese wieder in einen bereich einteilen dann regex laufen lassen und ergebnis in variablen speicher oder was du auch immer machen willst...
hoff ich konnt helfen , wenn noch fragen offen sind einfach fragen ...
lg
-
Das geht auch sehr gut mit regex_token_iterator
kleines Beispiel das den String so zerlegt, wie du dir das vorstellt und die einzelnen Bestandteile ausgibt:std::string test("1;2;3"); std::regex sem(";"); std::copy( std::sregex_token_iterator(text.begin(), text.end(), sem, -1), std::sregex_token_iterator(), std::ostream_iterator<std::string>(std::cout, "\n"));
-
reguläre Ausdrücke sind hier IMHO mit Kanonen auf Spatzen geschossen.
Falls der String aus einer csv-Datei oder ähnlichen Datei kommt, siehe hier
-
#include <regex> liefert "No such file or directory". Ist das auf bestimmte C Versionen beschränkt?
-
Werner Salomon schrieb:
reguläre Ausdrücke sind hier IMHO mit Kanonen auf Spatzen geschossen.
Falls der String aus einer csv-Datei oder ähnlichen Datei kommt, siehe hierjop ... hatte ich nicht drann gedacht richtig...
wenn du csv dateien einlesen und darstellen willst gibt es auch qt.tableview... das ist genau für so etwas gemacht
...
Sunset schrieb:
#include <regex> liefert "No such file or directory". Ist das auf bestimmte C Versionen beschränkt?
c-versionen? das ist c++ ...
std::regex -> ist c++11 -> musst du unter win glaube ich auch noch im compiler den richtigen dialekt auswählen bzw. angeben...
-
Es handelt sich nicht um Einlesen von Dateien.
C++11 kann ich leider nicht verwenden.
Gibt es vielleicht eine Möglichkeit, auf die Elemente des Strings einzeln zuzugreifen, ähnlich string[1] ?
-
Sunset schrieb:
Es handelt sich nicht um Einlesen von Dateien.
Nicht? Aber wo kommen dann die Strings her?
Sunset schrieb:
Gibt es vielleicht eine Möglichkeit, auf die Elemente des Strings einzeln zuzugreifen, ähnlich string[1] ?
Ohne selbst in die Tasten greifen zu müssen? Boost hat zumindest einen (Forward-) Iterator
#include <iostream> #include <boost/tokenizer.hpp> int main(){ using namespace std; typedef boost::tokenizer<> tokenizer; string s = "1;2;3"; tokenizer tok(s); for(tokenizer::iterator beg=tok.begin(); beg!=tok.end();++beg){ cout << *beg << "\n"; } }
-
Sunset schrieb:
Es handelt sich nicht um Einlesen von Dateien.
C++11 kann ich leider nicht verwenden.
Gibt es vielleicht eine Möglichkeit, auf die Elemente des Strings einzeln zuzugreifen, ähnlich string[1] ?
jop
std::string zeichenkette;
zeichenkette(1) -> ist das 1. oder 2. zeichen ,musst du mal schauen ob das bei 0 oder 1 losgeht... weiß ich jetzt gerade nicht!
-
Furble Wurble schrieb:
Sunset schrieb:
Es handelt sich nicht um Einlesen von Dateien.
Nicht? Aber wo kommen dann die Strings her?
das frage ich mich auch... aus den unendlichen weiten des computernichts...