J'ai une chaîne à marquer. Sa forme est HHmmssff
où H
, m
, s
, f
sont des chiffres.Tokensizer offset inversé
Il est censé être segmenté en quatre nombres à deux chiffres, mais j'en ai besoin pour accepter également les formes abrégées, comme sff
, pour qu'il l'interprète comme 00000sff
. Je voulais utiliser boost::tokenizer
offset_separator
, mais il semble fonctionner uniquement avec des décalages positifs et je voudrais le faire travailler en arrière.
Ok, une idée est de remplir la chaîne avec des zéros de la gauche, mais peut-être que la communauté trouve quelque chose uber -smart. ;)
Modifier:Des exigences supplémentaires viennent d'entrer en jeu.
Le besoin fondamental d'une solution était de traiter tous les cas plus intelligents, comme f
, ssff
, mssff
, etc., mais aussi accepter une notation de temps plus complet, comme HH:mm:ss:ff
avec ses formes sténographie, par exemple s:ff
ou même s:
(celui-ci est censé être interprété comme s:00
).
Dans le cas où la chaîne se termine par :
, je peux évidemment aussi la tamponner avec deux zéros, puis enlever tous les séparateurs en ne laissant que les chiffres et analyser la ficelle résultante avec de l'alcool.
Mais il semblerait que ce serait un peu plus simple s'il y avait un moyen de faire revenir le tokenizer offset à la fin de la chaîne (décalages -2, -4, -6, -8) et de lancer le numéro lexical à int
s.
"une idée est de remplir la chaîne avec des zéros de la gauche," Simple, rapide, fonctionne. Pourquoi chercher autre chose? –
Ne pas être un monstre des performances, mais cette solution implique une copie de chaîne (entrée est une chaîne const & std :: string). – macbirdie
ne devrait pas être un problème, std :: string est généralement assez intelligent pour être copié à l'écriture, donc il n'y aurait un coût de performance que si vous ajoutez réellement. –