Maison > développement back-end > Tutoriel C#.Net > Comment implémenter la fonction de fractionnement de chaînes en C++ ? (exemple de code)

Comment implémenter la fonction de fractionnement de chaînes en C++ ? (exemple de code)

青灯夜游
Libérer: 2019-11-25 16:50:56
avant
3379 Les gens l'ont consulté

En apprenant l'utilisation de base des chaînes en C++, j'ai découvert que istringstream[1] de sstream peut saisir des chaînes à la manière d'une console. En fait, ce comportement équivaut à utiliser des espaces pour saisir une chaîne.

Comment implémenter la fonction de fractionnement de chaînes en C++ ? (exemple de code)

Nous avons donc considéré que cette fonctionnalité pouvait être utilisée pour implémenter la fonction de fractionnement de chaîne split

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

Détails d'implémentation

Le but est d'obtenir facilement le tableau de chaînes traité en appelant une fonction comme en js, puis d'ajuster les paramètres en fonction de la situation réelle du c++.

1. Entrée et sortie :

string* split(int& length, string str, const char token = ' ')
Copier après la connexion

Retour : la première adresse du tableau de chaînes traité
Passer : chaîne str, jeton de délimiteur (par défaut Le paramètre est un espace), et la longueur du paramètre de référence, indiquant la longueur du tableau allouée dynamiquement après le traitement

2 Traitement transparent des données :
Parce que istringstream traitera les espaces comme cin. frontière entre les données, donc lorsque le délimiteur n'est pas un espace, le délimiteur entrant doit être remplacé par un espace et l'espace d'origine doit être traité à l'avance pour la transparence des données
Le remplacement des caractères utilise replace() dans l'algorithme de la bibliothèque [ 2]

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

3. Segmentation des données :

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

4. Génération de tableaux :

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

Code complet

  //根据计数结果动态开辟一个字符串数组空间
  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();
  }
Copier après la connexion

Cet article provient de la colonne Tutoriel C#.Net, bienvenue pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal