Если это ваша единственная проблема со сканированием / токенизацией, вам, вероятно, лучше пойти с решением, которое у вас уже есть, или внедрить FSM, как предложено Ферруччо.
Если у вас есть другие подобные проблемы, с другой стороны, выможет искать инструмент или библиотеку, которая может помочь вам в этом.Кто-то предложил lex, но вы также можете настроить библиотеку регулярных выражений.
Учитывая библиотеку соответствия строк, вы можете написать что-то вроде:
pmx_t ret;
ret = pmxMatchStr(src,"&e\\&K{(<*!}>)}&K{(<*!}>)}&K{(<*!}>)}&L")));
if (ret) {
printf("%.*s, %.*s, %.*s\n",pmxLen(ret,1),pmxStart(ret,1),
pmxLen(ret,2),pmxStart(ret,2),
pmxLen(ret,3),pmxStart(ret,3)
}
(также обрабатывать пробелы перед или между {...}
и съедает конец строки)
Да, пример - бесстыдное продвижение моей библиотеки (pmx) , но та же концепция применима с использованием одного из множества другихВы можете найти googling для регулярных выражений или библиотек регулярных выражений в C.