Analyser chaîne de caractères contenant des chiffres dans un tableau d'entiers
Une Chaîne de caractères est donnée comme une entrée qui est composé de chiffres et je veux le convertir en entier les tableaux en C++.
#include <string>
#include <iostream>
#include <sstream>
using std::string;
using std::stringstream;
using std::cout;
using std::endl;
int main(int argc,char** argv) {
string num="-24 2 90 24 50 76";
stringstream stream(num);
while(stream){
int n;
stream>>n;
cout<<n<<endl;
}
return 0;
}
De sortie(CCG) :
-24 2 90 24 50 76 76
Pourquoi suis-je encore plus de valeur et ce qui est efficace pour les convertir en tableau d'entiers ?
Mise à JOUR:
Que si la chaîne de flux de données contient séparateur différent de l'espace, Comment analyser cela?
Pour exemple:
string num="-24,2,90,24,50,76";
L'utilisation d'un vecteur...
Non, stocker dans un vecteur est un bon moyen d'obtenir en quelque chose que pour toutes fins utiles, est dans la gamme.
Non, stocker dans un vecteur est un bon moyen d'obtenir en quelque chose que pour toutes fins utiles, est dans la gamme.
OriginalL'auteur djadmin | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
La fin du fichier condition est pas mis sur une réussie analyser, vous devez vérifier l'état de flux après l'analyse.
La deuxième
76
est fondamentalement juste un pur hasard. Un infructueuse analyser les feuilles de la cible opérande intact, et parce que vous n'avez pas initialisern
, il peut être n'importe quoi.Un quickfix:
Un nettoyeur de corrigé:
Pour stocker les nombres entiers, à la manière canonique est d'utiliser
std::vector
si le nombre d'éléments est inconnu. Un exemple d'utilisation:Cependant, vous pouvez utiliser des itérateurs sur les cours d'eau et utiliser les éléments suivants:
Et le point important est qu'il utilise la valeur sans avoir vérifié que l'entrée réussi. (Ce qui est implicite dans votre code, mais il convient de dire explicitement.)
Et enfin, si vous voulez un vecteur de type int, la manière canonique est:
std::vector<int> values( (std::istream_iterator<int>( stream )), (std::istream_iterator<int>()) );
. Pas de boucles, pas depush_back
; tout se passe dans le constructeur.Mais il n'est pas défini car
n
n'a pas été initialisé; j'ai élaboré un peu. Bon deuxième, troisième point, heureux que vous avez fait le bilan de ma réponse.Ah, oui. Parce qu'il définit un nouveau
n
chaque fois autour de. Je pensais à quelque chose le long des lignes deint n; while ( !stream.eof() )
(où l'on voit si souvent).OriginalL'auteur Sebastian Mach
Un autre moyen de traiter avec un caractère séparés des entiers de la liste à l'aide d'un vecteur, qui est peut-être même un peu plus simpliste est plus comme ceci:
de cette façon, vous pouvez passer à n'importe quel caractère séparations (si elles existent) d'abord, puis par défaut de retour de l'accaparement des nombres entiers et de les ajouter à la liste si elles ne le font pas (AKA la fin de la liste)
OriginalL'auteur Thacious
je ne sais pas si vous trouvez la réponse à vos questions à jour ou pas. si vous n'en avez pas vous pouvez le faire facilement par le code
ce code supprime tous les deux-points et les remplace par un espace. ensuite, vous pouvez le faire normalement
OriginalL'auteur Duc Nguyen