Heim > Backend-Entwicklung > C#.Net-Tutorial > Wie implementiert man die String-Aufteilungsfunktion split in C++? (Codebeispiel)

Wie implementiert man die String-Aufteilungsfunktion split in C++? (Codebeispiel)

青灯夜游
Freigeben: 2019-11-25 16:50:56
nach vorne
3379 Leute haben es durchsucht

Als ich die grundlegende Verwendung von Zeichenfolgen in C++ erlernte, entdeckte ich, dass sstreams istringstream[1] Zeichenfolgen auf konsolenähnliche Weise eingeben kann. Im Wesentlichen entspricht dieses Verhalten der Verwendung von Leerzeichen zur Eingabe einer Zeichenfolge.

Wie implementiert man die String-Aufteilungsfunktion split in C++? (Codebeispiel)

Daher haben wir überlegt, dass diese Funktion zur Implementierung der String-Aufteilungsfunktion split verwendet werden kann

string src("Avatar 123 5.2 Titanic K");
istringstream istrStream(src); //建立src到istrStream的联系
string s1, s2;
int n;  double d;  char c;
istrStream >> s1 >> n >> d >> s2 >> c;
//以空格为分界的各数值则输入到了对应变量上
Nach dem Login kopieren

Implementierungsdetails

Der Zweck besteht darin, das verarbeitete String-Array einfach durch Aufrufen einer Funktion wie in js abzurufen und dann die Parameter entsprechend der tatsächlichen Situation von C++ anzupassen.

1. Eingabe und Ausgabe:

string* split(int& length, string str, const char token = ' ')
Nach dem Login kopieren

Rückgabe: die erste Adresse des verarbeiteten String-Arrays
Übergabe: String str, Trennzeichen-Token (Standard Der Parameter ist ein Leerzeichen) und die Referenzparameterlänge, die die dynamisch zugewiesene Array-Länge nach der Verarbeitung angibt

2. Datentransparente Verarbeitung:
Weil isstringstream Leerzeichen wie cin behandelt Grenze zwischen Daten. Wenn das Trennzeichen also kein Leerzeichen ist, muss das eingehende Trennzeichen durch ein Leerzeichen ersetzt werden, und das ursprüngliche Leerzeichen muss aus Gründen der Datentransparenz im Voraus verarbeitet werden
Die Zeichenersetzung verwendet im Bibliotheksalgorithmus replace() [ 2]

  const char SPACE = 0;
  if(token!=' ') {
    // 先把原有的空格替换为ASCII中的不可见字符
    replace(str.begin(), str.end(), ' ', SPACE); 
    // 再把分隔符换位空格,交给字符串流处理
    replace(str.begin(), str.end(), token, ' ');
  }
Nach dem Login kopieren

3. Datensegmentierung:

  假设输入字符串为:"a b,c,d,e,f g"
  分隔符为非空格:','
  则被替换为:"aSPACEb c d e fSPACEg"
Nach dem Login kopieren

4. Array-Generierung:

  //实例化一个字符串输入流,输入参数即待处理字符串
  istringstream i_stream(str); 
    //将length置零
  length = 0; 
  queue<string> q;
  //用一个string实例s接收输入流传入的数据,入队并计数
  string s;
  while (i_stream>>s) {
    q.push(s);
    length++;
  }
Nach dem Login kopieren

Vollständiger Code

  //根据计数结果动态开辟一个字符串数组空间
  string* results = new string[length]; 
  //将队列中的数据转入数组中
  for (int i = 0; i < length; i++) {
    results[i] = q.front();
    //将替换掉的空格进行还原
    if(token!=&#39; &#39;) replace(results[i].begin(), results[i].end(), SPACE, &#39; &#39;);
    q.pop();
  }
Nach dem Login kopieren

Dieser Artikel stammt aus der Spalte C#.Net Tutorial, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonWie implementiert man die String-Aufteilungsfunktion split in C++? (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage