相关疑难解决方法(0)

在 C++ 中模仿 shell 参数解析器

我一直在开发一个模仿 shell 终端的程序,并且遇到了一个比我预期更难的实现问题。基本上,我试图分割参数,就像 shell 传递给其可执行文件的方式一样。因此,想象一下这样的输入:

$> ./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

c++ regex command-line command-line-arguments

6
推荐指数
1
解决办法
2927
查看次数

使用具有不同参数的Boost Tokenizer escaped_list_separator

您好我一直在尝试使用boost库tokenizer类来使用tokenizer.我在boost文档中找到了这个教程:

http://www.boost.org/doc/libs/1 _36 _0/libs/tokenizer/escaped _list _separator.htm

问题是我不能让参数逃脱_list _separator("","","");

但如果我修改boost/tokenizer.hpp文件就可以了.但那并不是理想的解决方案,想知道是否有任何我想要的东西,以便在转义的_list _separator中获得不同的参数.

我想把它拆分为空格,用"和"表示转义,并且在引用的字符串中没有转义字符.

这用于在游戏控制台系统中进行参数解析系统.


include <iostream>
include <boost/tokenizer.hpp>
include <string>

int main() { using namespace std; using namespace boost; string s = "exec script1 \"script argument number one\""; string separator1("");//dont let quoted arguments escape themselves string separator2(" ");//split on spaces string separator3("\"\'");//let it have quoted arguments tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)> tok(s); for(tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)>::iterator beg=tok.begin(); beg!=tok.end();++beg) { cout << *beg << "\n"; } }

visual studio 2005的错误是错误C2974:'boost :: tokenizer':'TokenizerFunc'的模板参数无效,类型预期

编辑:这个问题由ferrucio认可,并由彼得谢谢的所有人解释.

c++ string boost tokenize

4
推荐指数
2
解决办法
1万
查看次数