题外话
C++11下的C++标准库,包含正则表达式程序库。《C++ Primer》第五版P.649有如下内容:
建议:避免创建不必要的正则表达式
如我们所见,一个正则表达式所表示的“程序”是在运行时而非编译时编译的。正则表达式的编译是一个非常慢的操作,特别是在你使用了扩展的正则表达式语法或是复杂的正则表达式时。因此,构造一个regex对象以及向一个已存在的regex赋予一个新的正则表达式可能是非常耗时的。为了最小化这种开销,你应该努力避免创建很多不必要的regex。特别是,如果你在一个循环中使用正则表达式,应该在循环外创建它,而不是在每步迭代时都编译它。
scanf()和printf()函数族中运用格式控制串,原理上与此相同。这就是我经常说这类函数那些复杂的格式表达式不算是C语言知识的原因,它已经超越C语言静态编译和检查的本质,属于动态解释执行语言的范畴,相当于一个内嵌微型的BASIC解释器,那些是"BASIC"语法,不是C语法。
我的基本观点:对scanf()的格式串,学会和使用最基本最简单的%c、%d、%s以及若干长度、类型控制之类格式即可,不要把精力放在钻研“高级技术”之上,那只会引诱你偏离本语言。到你真正的成为高级编程人员时,可以考虑钻研这些,那时才不会失去方向,也更知道应该怎么用,而不是被诱惑。
[此贴子已经被作者于2015-12-13 19:48编辑过]