Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man die String-Aufteilungsfunktion split in C++? (Codebeispiel)

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

青灯夜游
青灯夜游nach vorne
2019-11-25 16:50:563306Durchsuche

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;
//以空格为分界的各数值则输入到了对应变量上

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 = ' ')

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, ' ');
  }

3. Datensegmentierung:

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

4. Array-Generierung:

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

Vollständiger Code

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen