Я анализирую строку, которая соответствует предсказуемому шаблону:
- 1 символ
- целое число (одна или несколько цифр)
- 1 двоеточие
- строка, длина которой пришла от # 2
Например:
s5:stuff
Я легко вижу, как разобрать это с помощью PCRE или тому подобного, но я предпочел бы придерживаться простых операций с цепочками ради скорости.
Я знаю, что мне нужно сделать это в 2 шага, потому что я не могу выделить строку назначения, пока не узнаю ее длину. Моя проблема заключается в изящном получении смещения для начала указанной строки. Какой-то код:
unsigned start = 0;
char type = serialized[start++]; // get the type tag
int len = 0;
char* dest = NULL;
char format[20];
//...
switch (type) {
//...
case 's':
// Figure out the length of the target string...
sscanf(serialized + start, "%d", &len);
// <code type='graceful'>
// increment start by the STRING LENGTH of whatever %d was
// </code>
// Don't forget to skip over the colon...
++start;
// Build a format string which accounts for length...
sprintf(format, "%%%ds", len);
// Finally, grab the target string...
sscanf(serialized + start, format, string);
break;
//...
}
Этот код примерно взят из того, что у меня есть (который не завершен из-за рассматриваемой проблемы), но он должен понять суть. Может быть, я принимаю неправильный подход полностью. Какой самый изящный способ сделать это? Решение может быть C или C ++ (и я бы хотел увидеть конкурирующие методы, если ответов будет достаточно).