У меня есть строка tokenize. Форма составляет HHmmssff
, где H
, m
, s
, f
- цифры.Реверсивный сдвиг tokenizer
Предполагается, что он обозначается четырьмя двузначными числами, но мне также нужно принять короткие формы, например sff
, поэтому он интерпретирует его как 00000sff
. Я хотел использовать boost::tokenizer
offset_separator
, но он работает только с положительными смещениями, и я хотел бы, чтобы он работал в обратном порядке.
Хорошо, одна идея состоит в том, чтобы заполнить строку нулями слева, но, возможно, сообщество придумает что-то uber -smart. ;)
Редактировать:Дополнительные требования только что вступили в игру.
Основная потребность в более разумного решения в том, чтобы обрабатывать все случаи, как f
, ssff
, mssff
и т.д., но и принимать более полное время обозначения, как HH:mm:ss:ff
с его короткой стороны, формы, например s:ff
или даже s:
(этот должен интерпретироваться как s:00
).
В случае, когда строка заканчивается на :
, я могу, очевидно, поместить ее и с двумя нулями, а затем вычеркнуть все разделители, оставив только цифры и разобрать полученную строку духом.
Но кажется, что было бы немного проще, если бы был способ, с помощью которого токенизатор смещения возвращался из конца строки (смещения -2, -4, -6, -8) и лексически вводил числа до int
s.
«Одна идея состоит в том, чтобы набивать строку нулями слева», Простой, быстрый, работает. Зачем искать что-нибудь еще? – 2008-11-13 13:25:54
Не означает, что вы являетесь производителем, но это решение включает в себя некоторое копирование строк (input - это const и std :: string). – macbirdie 2008-11-13 13:41:23
не должно быть проблемой, std :: string обычно достаточно умна, чтобы копировать при записи, так что при добавлении фактически будет стоить только производительность. – 2008-11-13 14:00:11