Я работал над программой, имитирующей терминал оболочки, и столкнулся с проблемой реализации, которая сложнее, чем я ожидал. По сути, я пытаюсь разделить аргументы, подобно тому, как оболочка передает свой исполняемый файл. Итак, представьте себе ввод, например:
$> ./foo some arguments
Можно было бы ожидать, что аргументы, переданные программе, будут представлять собой массив вроде (при условии C/C++):
char ** argv = {"foo", "some" "arguments"}
Однако, если бы аргументы были:
$> ./foo "My name is foo" bar
Массив будет:
char ** argv = {"foo", "My name is foo", "bar"}
Может ли кто-нибудь предложить эффективный способ реализовать это, чтобы интерфейс выглядел так:
vector<string> splitArgs(string allArgs);
or string[] splitArgs(string allArgs);
Я могу, конечно, просто повторять и переключаться между состояниями «чтение слов»/«чтение цитируемого текста», но я чувствую, что это не так эффективно, как могло бы быть. Я также играл с идеей регулярных выражений, но я недостаточно знаком с тем, как это делается в C++. Для этого проекта у меня также установлены библиотеки boost, если это поможет.
Спасибо! РР