Я работал над программой, имитирующей терминал оболочки, и столкнулся с проблемой реализации, которая сложнее, чем я ожидал.По сути, я пытаюсь разделить аргументы, очень похоже на то, как оболочка передает свой исполняемый файл.Таким образом, представляя входные данные, такие как:
$> ./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);
или string[] splitArgs(string allArgs);
Я, конечно, могу просто перебирать и переключаться между состояниями 'чтение слов "/" чтение цитируемого текста ", но я чувствую, что это не так эффективно, как могло бы быть.Я также играл с идеей регулярных выражений, но я недостаточно знаком с тем, как это делается в C ++.Для этого проекта у меня тоже установлены библиотеки boost, если это поможет.
Спасибо!RR