2010-08-05 18 views
4

Comment convertir facilement une chaîne contenant deux flottants séparés par une virgule en un complexe?Comment convertir une chaîne en complexe <float> en C++?

Par exemple:

string s = "123,5.3";//input 
complex<float> c(123,5.3);//output/what I need 

est-il un moyen plus simple/plus rapide que de diviser la chaîne, lisez les deux valeurs et retourner le complex<float>?

Répondre

8

Ajoutez juste les parenthèses et la valeur par défaut operator>> va le faire pour vous:

#include <iostream> 
#include <string> 
#include <complex> 
#include <sstream> 
int main() 
{ 
     std::string s = "123,5.3";//input 

     std::istringstream is('(' + s + ')'); 
     std::complex<float> c; 
     is >> c; 

     std::cout << "the number is " << c << "\n"; 
} 

PS. C'est drôle, le style de chacun est légèrement différent, même si les réponses sont les mêmes. Si vous êtes prêt à gérer les exceptions, cela peut être fait avec boost aussi:

std::complex<float> c = boost::lexical_cast<std::complex<float> >('('+s+')'); 
+0

Exactement ce dont j'ai besoin. Merci. – Burkhard