Wie teilen Sie eine Zeichenfolge in Tokens in C++?Teilen von Zeichenfolgen in C++
Antwort
Es hängt davon ab, wie komplex der Token-Begrenzer ist und ob es mehrere gibt. Für einfache Probleme verwenden Sie einfach std :: istringstream und std :: getline. Verwenden Sie für komplexere Aufgaben oder wenn Sie die Token STL-konform iterieren möchten, Boost Tokenizer. Eine andere Möglichkeit (obwohl unordentlicher als eine dieser beiden) besteht darin, eine while-Schleife einzurichten, die std :: string :: find aufruft und die Position des zuletzt gefundenen Tokens als Startpunkt für die Suche nach dem nächsten Token aktualisiert. Aber das ist wahrscheinlich die anfälligste der 3 Optionen.
Try string mit:
std::string line("A line of tokens");
std::stringstream lineStream(line);
std::string token;
while(lineStream >> token)
{
}
überprüfen meine Antwort auf Ihre letzte Frage aus:
C++ Reading file Tokens
dies gut funktioniert für mich :), bringt es die Ergebnisse in elems
. delim
kann jede char
sein.
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
Warum elems zurückgeben. Wann wird es als Referenzparameter in die Funktion übernommen? –
oh, nur für die Bequemlichkeit. Also, wenn Sie brauchen, können Sie etwas tun wie: Split (Linie, ',', Elems) .at (2); es ist völlig unnötig, es zurückzugeben. –
können Sie verwenden, um die C-Funktion strtok:
/* strtok example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
Die Boost Tokenizer tut auch den Job:
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
int main(){
using namespace std;
using namespace boost;
string s = "This is, a test";
tokenizer<> tok(s);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout << *beg << "\n";
}
}
Achten Sie auf Strtok in Multi-Thread-Code. http://www.linuxjournal.com/article/1363 –
Mit this Mingw distro, die Boost-beinhaltet:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <ostream>
#include <algorithm>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
vector<string> v;
split(v, "1=2&3=4&5=6", is_any_of("=&"));
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
See steigern auch :: Spaltung von String Algo library
string str1("hello abc-*-ABC-*-aBc goodbye"); vector<string> tokens; boost::split(tokens, str1, boost::is_any_of("-*")); // tokens == { "hello abc","ABC","aBc goodbye" }
- 1. Ersetzen von Teilen von HTML-Zeichenfolgen in mehreren Dokumenten
- 2. Wie kann ich eine Reihe von Zeichenfolgen in ihre Bestandteile in C# teilen?
- 3. Get ein Array von Zeichenfolgen zwischen zwei Zeichenfolgen in C
- 4. Zeichenfolge in Array von Zeichen in C++ teilen
- 5. Ändern eines Arrays von Zeichenfolgen in C
- 6. Arrays von Zeichenfolgen in verwaltet C++
- 7. Verketten von Zeichenfolgen in Makros - C++
- 8. Ändern von HTML-Zeichenfolgen in C#?
- 9. Sortieren eines Arrays von Zeichenfolgen in C#
- 10. Manipulieren von Zeichenfolgen in Objective-C
- 11. Speichern von C++ - Zeichenfolgen in AWL-Satz
- 12. Zerlegen von Zeichenfolgen in Javascript
- 13. Vergleich der Zeichenfolgen in C
- 14. C++ - Alphabetische Zeichenfolgen
- 15. C++ - Anwendung in Bibliotheken teilen
- 16. Vergleichen von Zeichenfolgen in Go
- 17. Union Speicher teilen in C
- 18. Abfrage Array von Zeichenfolgen nach Array von Zeichenfolgen in elasticsearch.net
- 19. C# - Vergleichen von Zeichenfolgen verschiedener Kodierungen
- 20. Vergleichen von Zeichenfolgen und Arrays C#
- 21. Ich möchte eine Liste von Zeichenfolgen aufteilen, um auf "/" und "und" zu einer Liste von eindeutigen Zeichenfolgen zu teilen
- 22. Rückgabe von zwei Zeichenfolgen in einer Funktion in C#
- 23. tolower-Funktion für C++ - Zeichenfolgen
- 24. Teilen von Zeichenfolgen in einer Textdatei und speichern, um Variablen in der Shell zu trennen
- 25. In C, wie kann man HTML-Zeichenfolgen in C-Zeichenfolgen konvertieren?
- 26. Cross-Plattform-Zeichenfolgen (und Unicode) in C++
- 27. Teilung von Zeichenfolgen in 2 Spalten Oracle
- 28. qsort zu lexigraphisch sortiere Zeichenfolgen in c
- 29. C# Teilen und Umkehren von Dateien
- 30. Teilen Ordner durch C#
dup von http://stackoverflow.com/questions/236129/c-how-to-split-a-string – ididak
Wie wäre es nur einige der Beispiele aus der folgenden : http://www.codeproject.com/KB/recipes/Tokenizer.aspx Sie sind sehr effizient und etwas elegant. Die String Toolkit Library macht die komplexe String-Verarbeitung in C++ einfach und einfach. –