2012-07-24 4 views
-1

Je suis en train de diviser ce qui suit, j'ai besoin de le diviser par la fonction strtok et je veux obtenir la valeur 1.2597, notez que Down est un mot dynamique qui peut être changé. Je comprends dans ce cas que je peux utiliser l'espace blanc comme délimiteur, et obtenir la valeur [1] qui est la devise, mais comment puis-je faire avec.C++ comment utiliser strtok dans ce cas

CCY 1,2597 0,0021 vers le bas (0,16%) 14:32 SGT [44]

+0

ce ius la question? vous avez dit ce que vous devez faire .... – Nahum

+0

strtok va modifier la chaîne existante. Êtes-vous sûr de vouloir l'utiliser? – ThirdOne

+2

[Qu'avez-vous essayé?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

Répondre

1

Cela devrait le faire:

char *first = strtok(string, ' '); 
char *second = strtok(0, ' '); 

Si vous souhaitez convertir le nombre à un float ou double vous pourriez aussi utiliser sscanf:

char tmp[5]; 
float number; 
sscanf(string, "%s %f", tmp, &number); 

Ou tout simplement utiliser sscanf sur le jeton numéro que vous avez obtenu avec strtok.

1

Vous pouvez utiliser Boost.Regex pour atteindre facilement et en toute sécurité cette tâche:

// use a regular expression to extract the value 
std::string str("CCY 1.2597 Down 0.0021(0.16%) 14:32 SGT [44]"); 
boost::regex exp("CCY (\\d+\\.\\d+)"); 
boost::match_results<std::string::const_iterator> match; 
boost::regex_search(str, match, exp); 
std::string match_str(res[1].first, res[1].second) 

// convert the match string to a float 
float f = boost::lexical_cast<float>(match_str); 
std::cout << f << std::endl; 
0

Une séquence d'appels à cette scission fonction str en jetons, qui sont des séquences de caractères contigus séparés par l'un des personnages qui font partie des délimiteurs.

Exemple:

char str[] = "now # is the time for all # good men to come to the # aid of their country"; 
char delims[] = "#"; 
char *result = NULL; 
result = strtok(str, delims); 
while(result != NULL) { 
    printf("result is \"%s\"\n", result); 
    result = strtok(NULL, delims); 
} 

SORTIE:

result is "now " 
result is " is the time for all " 
result is " good men to come to the " 
result is " aid of their country" 
Questions connexes