2010-10-12 6 views
1

J'ai une chaîne dans le format suivant: « R: 625.5m E: -32768m »Obtenir une sous-chaîne en C

Quelle est la façon la plus efficace de tirer le 625,5?

+3

Utilisez une expression régulière. Maintenant, vous avez deux problèmes. :) – Randolpho

+0

Je le reprends ... quel est le moyen le plus rapide et le plus sale d'y parvenir? – FoppyOmega

+0

Désolé, ma mauvaise blague. J'ai effectivement répondu à la question, aussi. Utilisez 'sscanf'. – Randolpho

Répondre

1

Votre meilleur pari est d'utiliser sscanf pour lire des informations formatées à partir de la chaîne.

sscanf(mystr, "R: %f", &myFloat); 
+1

Et - tout comme avec les expressions régulières - maintenant vous avez deux problèmes. – zwol

+0

@Zack: l'analyse était déjà le problème. Les expressions régulières constituent le problème en plus de ce problème d'analyse. – Randolpho

+0

Ce que je voulais dire, c'est que * scanf est aussi un problème en plus du problème d'analyse d'origine. Voir mes réponses aux autres réponses. – zwol

1

sscanf est un bon candidat pour analyser des chaînes simples avec un format fixe.

+0

OP recherche la manière la plus efficace – Svisstack

+0

@Svisstack: voir les commentaires. Il veut "rapide et sale", pas "trois millisecondes plus vite que' sscanf' ". 'sscanf' * est * la bonne réponse. – Randolpho

+0

@Svisstack: mais n'a pas dit s'il se soucie plus de l'efficacité d'exécution ou de l'efficacité du programmeur, ni s'il a besoin du résultat comme une chaîne ou un nombre, ni combien la chaîne peut varier, s'il est d'accord pour modifier l'original string, etc. Sans savoir tout cela, 'sscanf' est à peu près aussi bon choix que tout et mieux que la plupart (certainement beaucoup plus raisonnable que tout ce qui implique de modifier l'entrée). –