Я пытаюсь преобразовать строку типа "ABC10DEF20"
в массив ["ABC", 10, "DEF", 20]
с использованием Boost Spirit. Я не уверен, что термин «неподдерживаемый» является правильным термином, но я хочу разбить его на границы целых и нецелых чисел, а не разделить его пробелом или другим разделительным символом.Извлечение неразделимых строк и целых чисел с использованием Boost Spirit
я придумал с кодом, как:
std::string search_str = "ABC10DEF20";
std::vector<boost::variant<std::string, unsigned int> > v;
std::string::const_iterator iter = search_str.begin();
std::string::const_iterator last = search_str.end();
bool r = parse(iter, last,
+(+(char_ - digit)|uint_),
v);
Для ввода "ABC10DEF20"
это приводит к [ 65, 66, 67, 10, 68, 69, 70, 20 ]
(без каких-либо строк, только целых чисел и ASCII компонента части строки, хранящейся в целых числах). Для ввода "10"
я получаю [ 10 ]
, как и предполагалось.
Создание результатов изменение правила в '[65, 66, 67, 49, 48, 68, 69, 70, 50, 48] ', поэтому это на самом деле хуже, потому что теперь даже целые числа входят как символы ASCII. – eco
Также, char_ должен преобразовать в std :: string просто отлично. Документы Boost Spirit делают это несколько раз. – eco
Что делать, если вы определяете приоритет «цифры»? т. е. 'digit - + char_'? –