也谈表达式分析和计算
摘要:昨天看到 王博炜 Blog中《五进制》这篇文章。其中关于5进制到10进制的转换自然没有什么意思,这篇文章给的代码主要是讨论如何进行表达式分析和计算的。作者自制了一个Stack,并且用其形成了两个堆栈分别用于存储数值和运算符。比较典型的表达式处理的方法。从实现上看,代码有些臃肿,而且必要的优化很少,另外就是没有充分利用标准提供的便利。比如那个Stack完全没有必要自制,STL提供的std::stack<T>可以很好的完成任务。而今天我要做的是,使用boost::spirit来实现同样的表达式分析和计算。众所周知,boost是C++中质量很高的库,被称为准标准库,因为其存在的一个很重要
阅读全文
中科院中文分词系统ICTCLAS之NShortPath代码的详细分析
摘要:这两天我开始看ICTCLAS的实现代码了,和吕震宇的感觉完全一样,代码真的是糟糕透顶,呵呵,非常同情吕震宇和Sinboy能够那么认真地把那些代码读完。有了你们辛苦、认真的分析工作,让我更容易的读懂ICTCLAS的代码了,谢谢了。阅读过程中注意到了他们分析中有些地方有点小错误。 ICTCLAS的命名好像没有正统的学过数据结构一样,对于数据结构的命名非常富有想象力,完全没有按照数据结构上大家公认的术语命名,所以给代码的读者带来很大的迷惑性。所以我们在看名字的时候一定要抛开名字看实现,看本质,看他们到底是个啥。呵呵。 首先就是CQueue的问题,CQueue虽然叫Queue,但是它不是FIFO的Qu
阅读全文
编程语言的家族族谱(看看你知道的有多少)
摘要:在这个列表中只有50左右的语言,如果你找不到你所想要的语言,那么请看Bill Kinnersley 的列表,他的列表里可有2500种编程语言呢。呵呵:http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm访问 计算机语言历史 网站 O'REILLY有一份彩色的编程语言历史:http://www.oreilly.com/pub/a/oreilly/news/languageposter_0504.html本文信息来自:http://www.levenez.com/lang/
阅读全文
函数内Static初始化的用法
摘要:如果想第一次使用的时候再初始化,而程序正常退出的时候,再释放资源。那么应该将其放到某个函数中,作为static声明。#include "Object.h"#include "Container.h"#include <iostream>using namespace std;static Object sglobal(" static global");Object global(" global");void func(){cout << " In func()" &l
阅读全文
[翻译]在Visual C++ Express 2005中使用WTL
摘要:VC 2005 Express 已经在11月7日发布了,我们现在可以用它来Free的进行WTL程序设计。步骤如下:1、从MSDN的网站上下载并安装VC Express 2005http://msdn.microsoft.com/vstudio/express/visualc/2、下载并安装Platform SDK,并且更新VC Express的设置:http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx3、更新Visual C++ 的Include 和Library的Directories设置:Tools
阅读全文
让我们用中文编程(二)之C++篇 - 自己做中文编程语言,你也行
摘要:让我们用中文编程(二)之C++篇 - 自己做中文编程语言,你也行作者 : Dancefire (Dancefire [at] gmail)日期 : 2005年11月11日由于CSDN的Blog好像对表格支持不好,我贴了几次,都导致了重复的内容。所以,为了能够贴到这里,我把表格都改变了,所以,推荐大家访问没有改过格式的连接:http://www.dancefire.org/Project/SinoProgram/引言上回书说到,用C#来进行中文编程,最后的主程序上很是有趣,没看过的客官,可以看看第一篇《让我们用中文编程》。看到有些客官,在后面说到,如果连那些关键字也能够中文化就好了。当时心中无奈
阅读全文
理解继承
摘要:#include <iostream>using namespace std;int inc = 0;string tab(){ string t; t.reserve(inc+1); for(int i = 0 ; i < inc ; ++i) { t.push_back('\t'); } return t; } class base{public: base(void){ inc++; cout<<tab()<<"Base::ctor()"<<endl; cout<<tab()<&l
阅读全文
尝试用C++封装Socket库
摘要:这两天又看了几眼Socket编程,我老是没长性,总是东看看西看看。还老爱挑毛病,钻牛角尖,真是不可救药了。这不,又开始看Socket不顺眼了。当时是看了一个朋友给我的一段socket raw编程的代码,有一段看的我很恶心。如下:if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0){ printf("WSAStartup failed: %d\n",ErrorCode); return 2; } sockMain=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_F
阅读全文
多文件编程include规则
摘要:在C++中,习惯声明和定义分开,也就是经常出现一个Class对应两个文件,一个.h,一个.cpp。当我们面对多个类设计的时候,文件include可能需要注意。我对此没太多经验,因此吃了点亏。自己总结一点点经验:1、MyClass.h此文件只放置与MyClass有关的声明,而不放置任何MyClass中可能用到的类的声明,或者其它.h的引入。在MyClass.h的首部添加#pragma once或者在文件首尾的地方添加#ifndef_XXXXXX_H_#define _XXXXXX_H_....#endif用以确保声明只被#include一次。2.MyClass.cpp每个Class.cpp的首部
阅读全文
Regular Expression 正则表达式-4 (C++)
摘要:因为总觉得上回写的C++代码太过蹩脚了,心有不甘。毕竟C++是一个很优秀的语言,并且有着众多出色的模板库,这么简单的一个小程序被我给用成那样,真的是太惭愧了。代码绝对不应该这么臃肿。实际上我有几个概念模糊不清了,所以导致了代码的臃肿,一个是输入输出流的概念模糊了,还有一个是正则表达式应用不熟悉。于是重温了输入输出流,并且详细的阅读了正则表达式的Boost库的说明文档。新写的代码如下,明显比原来的代码优雅了许多:#include <string> #include <boost/regex.hpp> #include <iostream> #include &
阅读全文
Regular Expression 正则表达式-3 (C++)
摘要:最后用C++实现了一把,因为STL中尚未包含Regular Expression,因此我使用了Boost中的Regex++。不过因为不是很熟悉,所以代码很蹩脚,将就看了。呵呵。#include <string> #include <boost/regex.hpp> #include <iostream> #include <fstream> using namespace std; void readFile( const char* filename, string& str ); void writeFile( const char*
阅读全文