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.
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; //以空格为分界的各数值则输入到了对应变量上
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 = ' ')
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, ' '); }
3. Segmentation des données :
假设输入字符串为:"a b,c,d,e,f g" 分隔符为非空格:',' 则被替换为:"aSPACEb c d e fSPACEg"
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++; }
Code complet
//根据计数结果动态开辟一个字符串数组空间 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(); }
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!