Tag Archives: C

使用Antlr的C接口(3.4版)

昨天听同事介绍了Antlr 4,它是一个非常强大的词法、语法分析器辅助生成工具,比之前用Flex + Bison强太多倍。

遗憾的是,当前的v4只支持Java,暂不支持C、C++,于是降级了一把,尝试了一下在3.4版上使用Antlr C。

要说明的是,这不是一篇原创文章,我参考了两篇文章,如下:

《用ANTLR3实现规则解析—-1-安装》 http://blog.csdn.net/wfp458113181wfp/article/details/9148577

《ANT[……]

继续阅读

C++中,解析UTF-8字符的位置。

在C++的char*以及string中,使用的是字节流编码,即sizeof(char) == 1。

也就是说,C++是不去分字符的编码的。

而一个合法UTF8的字符长度可能为1~4位。

现在假设一串输入为UTF8编码,如何能准确的定位到每个UTF8字符的“CharPoint”,而不会错误的分割字符呢?

参考这个页面:http://www.nubaria.com/en/blog/?p=289

可以改造出下面的函数:
[crayon-5972852c07e754159[……]

继续阅读

C++ Boost智能指针(smart_ptr)快速指南

智能指针(smart_ptr)是Boost各组件中,应用最为广泛的一个。

重所周知,C++没有提供Java中的垃圾回收机制。因此,在堆上申请的内存,需要自行回收,这就很容易导致内存泄漏。虽然STL提供了auto_ptr,但是受限太多(例如,不能放到容器中。。。),因此很少有人使用。

Boost从很早就提供了如下的智能指针,并且功能一直保持稳定:

  • scoped_ptr:不可拷贝,承载new。
  • scoped_array:不可拷贝,承载new []。
  • shared_ptr:[……]

继续阅读

C++中Trim的方法

C++中Trim的方法,其实也是写的很Trick的……

参考:http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring

C++使用strtok实现分割字符串。

C++中有一些号称很优雅的功能和方法……但是有的压根不能指定分隔符,有的依赖于stream所以分隔符只能是char,真是Ugly到家了……

比如stackoverflow中提到的诸多方法:http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

其实strtok是标准的c函数啊,而且现在重入问题也已经被解决了,通过保存指针的方式,为什么不喜欢用呢?
我一直认为,C++是最难用的语言,没有之一。

9[……]

继续阅读