J'essaie de faire une fonction qui prend une dispute devrait être quelque chose comme ceci il est censé le retourner uniquement les chiffres uniquement sans les points-virgules ou [et]. et des espaces p> comme ceci: p> afin que je puisse convertir ultérieurement la chaîne et les enregistrer dans une matrice p> Idées? P> #include <iostream>
#include <string>
using namespace std;
string s1 = "[1 -2.5 3;4 5.25 6;7 8 9.12]";
void cutter(string s){
for(int i=1;i<s.length();i++){
if(i != s.find(" ") && i != s.find(";") ){
cout << s[i];
s.erase(0,i-1);
}
else if(i == s.find(" ") || i == s.find(";") ){
cout<<endl;
}
}
}
int main()
{
cutter(s1);
return 0;
}
4 Réponses :
Pour supprimer le Pas besoin de boucles manuelles sur la chaîne. Notez également que, dans la signature de la fonction, vous avez besoin Bien sûr, vous pouvez également la conserver par copie et renvoyer la chaîne modifiée: p> et dans [ code> et ] code> et également remplacer le ; code> avec des espaces que vous pouvez faire quelque chose comme ceci: string & s code>, pas String s code>. Sans que & code> Vous passez une copie de la chaîne à la fonction et que la copie est supprimée à la fin, ce n'est pas un changement à l'original. Avec le & code> vous transmettez plutôt une référence et que le programme fonctionne comme prévu. P>
principale code>, faire: p>
Personnellement Déteste I> Paramètres. J'aurais fait la signature de la fonction std :: String Cutter (STD :: String S) Code>.
merci cela a fonctionné mais j'ai toujours besoin de chaque numéro seul pour que je puisse le transmettre dans un tableau
@Jesperjuhl Voir où vous venez; Cependant, en place des opérations pour les chaînes sont parfois utiles. Je serais tenté de faire deux versions
@Jesperjuhl Bon point, j'ai fait une édition pour inclure cette possibilité.
@YUSUFSameh Vous ne pouvez pas avoir chaque numéro seul dans une chaîne sans les délimiter d'une manière ou d'une autre. On dirait que vous voulez un tableau ou un vecteur de chaînes contenant chacun une chaîne. Comme Nathanoliver suggéra, les flux de cordes seraient un bon moyen de l'accomplir.
Si vous avez Boost , alors ceci est Presque trivial: Vous voudrez peut-être prendre une copie de S1, car elle sera mutée dans cet exemple. p> p>
ci-dessous est une solution qui utilise deux fonctions.
Une fonction renvoie une nouvelle chaîne sans [] et; p>
L'autre fonction convertit une chaîne avec des valeurs de flotteur vers un vecteur de flotteurs. P>
1 -2.5 3 4 5.25 6 7 8 9.12 Number of floats: 9 1 -2.5 3 4 5.25 6 7 8 9.12
ça ne fonctionne pas sur ma machine
@YUSUFSameh hmm ... il court ici ici ideone.com/tjyyco Quel problème obtenez-vous?
Et voici une solution à base de regex (C ++ 11 et plus): sortie: p> plus, base basée sur la solution Lors de l'élimination des caractères supplémentaires (mais le premier idiomatiquement est plus préférable): p>
Remplacez le
[;] code> avec des espaces, puis chargez la chaîne dans un flux de chaîne et lisez-la comme si vous allez normalement lire des données séparées de l'espace.Je ne peux pas le remplacer thats comment l'entrée devrait être ... c'est un moyen d'écrire des matrices un point-virgule signifie la fin d'une rangée
@YUSUFSAMEH - Écrivez ensuite une fonction qui fait une copie de la chaîne, manipule la copie et le renvoie. Supprimer également les caractères d'une chaîne ne nécessite pas d'écrire des boucles d'erreur. Utilisez les fonctions d'algorithme STL pour supprimer des caractères.
@YusufSameh puis remplacez le
[] code>, chargez-le dans un stringream, puis utilisezgetline code> pour lire jusqu'à ce que; code> pour que vous puissiez analyser les lignes correctement.Consultez ceci: Stackoverflow.com/questions/53849/...