C语言的可变扫描



我很好奇是否有可能在c中实现scanf的一种可变版本。我的意思是,如果输入是push (1 2 3), scanf将能够将其解析为%s %d %d %d,如scanf("%s (%d)", string, some_list)

它将获取%d的所有实例并将它们(按顺序)附加到列表中…

我说的有道理吗?

EDIT:对于指定的输入,string == "push"some_list == [1, 2, 3] .

不是vscanf, vssscanf, vsscanf是你正在寻找什么?从1999年起可以买到。

下面是vscanf函数的描述和使用示例。注意,C是一种编译的强类型语言,您需要正确地给出格式说明符。做一些类似于高级语言所做的事情将涉及更多的工作(但这是可能的,因为功能返回用C编写)。

当然。你可以实现这样一个scanf版本:

不属于C库的原因是它需要的数据结构不是内置在库中。比如一个链表,或者一个可调整大小的数组。

但是无论如何,您可以创建一个接受高级模式形式的scanf函数。可以写成super_scanf("%{s:allocate} (%{d*:array,append)", &string, &array)

但通常情况下,您要么编写自己的标记器和简单解析器,要么使用lex/yacc等功能强大的工具。或者您可以使用正则表达式库,如PCRE库。

相关内容

  • 没有找到相关文章

最新更新