2011年10月13日
摘要: 【前言】 选题仍然是源自课堂习题,是要设计一个含有通配符问号的KMP字符匹配算法。其实这个目标是非常容易达到的。但是,接着想到通配符星号时,就感到有些困难了。因为星号可以匹配的字符个数不是确定的,所以子串中含有星号时要多次扫描母串,每种情况都要逐一比对才行,现有的匹配算法显然达不到这样的目的。现在要设计一种算法,即能完成不含通配符的匹配问题,同时又能适应含通配符的匹配问题。【分析】 通配符共有两种,问号和星号。“?”表示一个任意字符,而“*”则表示任意个任意字符。 首先来想问号的处理,子串扫描到问号时,不管母串是什么字符我们都认为它们是匹配的就行了。就是在匹配条件中加一条,变成s[i]==t[ 阅读全文
posted @ 2011-10-13 10:17 白草黒尖 阅读(2238) 评论(0) 推荐(0) 编辑
  2011年10月12日
摘要: 在C++中,一个类实例化得到的结果就是一个对象。一个类包含成员变量和成员函数,成员变量分为non-static和static,成员函数分为non-static成员函数、static成员函数以及virtual成员函数。一个对象包含可能存在的vfptr以及它声明的或基类继承而来的non-static成员变量,static成员变量、static成员函数、non-static成员函数以及virtual函数均存在于对象之外。 VC2005中有一个非常重要的编译选项:对于查看类的对象的内存布局,MS在VC2005中(要先进入Microsoft Visual Studio -> Visual Stud 阅读全文
posted @ 2011-10-12 12:54 白草黒尖 阅读(883) 评论(0) 推荐(0) 编辑
摘要: Yet another "feature" from the developers of ubuntu to simplify life, "dos2unix" and "unix2dos" are missing in version 10.04 (Lucid). First of all, install dos2unix package: #sudo aptitude install tofrodos Then if you want "dos2unix" type "fromdos" a 阅读全文
posted @ 2011-10-12 12:50 白草黒尖 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 在Vim中,有四个与编码有关的选项:fileencodings、fileencoding、encoding和termencoding。实际使用中,任何一个选项错误,都会导致乱码。因此, 每一个 Vim 用户都应该明确这四个选项的含义。1. encoding encoding 是 Vim 内部使用的字符编码方式。 设置了 encoding 后, Vim 内所有的 buffer、 寄存器、 脚本中的字符串等, 全都使用这个编码。 Vim 在工作的时候, 如果编码方式与它的内部编码不一致, 它会先把编码转换成内部编码。 如果工作用的编码中含有无法转换为内部编码的字符, 在这些字符就会丢失。 因此,. 阅读全文
posted @ 2011-10-12 12:21 白草黒尖 阅读(396) 评论(0) 推荐(0) 编辑
  2011年10月11日
摘要: 很多人并不是把Perl当做第一门编程语言来学习的,在学Perl之前往往已 经掌握了一两门其它语言。虽然有争议,但是我个人认为Perl确实不适合作为入门语言。这篇文章就是写给那些熟悉C而且又想掌握Perl的程序员,介绍一 些技巧以及如何避免C程序员常犯的错误,带你渡过危险的沼泽。在读这篇文章之前,请先查看perltrap的手册页,里面有很多有用的信息,这里不再重 复。欢迎来到Perl的魔法世界!如果你喜欢C,那你也会爱上Perl。C语言的设计者Dennis Ritche说:“C语言诡异离奇,缺陷重重,却获得了巨大的成功。 ”这大概是因为C的抽象程度碰巧既满足了程序员的要求, 又容易实现。钟爱C. 阅读全文
posted @ 2011-10-11 18:13 白草黒尖 阅读(876) 评论(0) 推荐(1) 编辑
摘要: 一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的,这两者只是在编码层次上有差异。 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。 从上面可以看出文本文件基本上是定长编码的,基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特;而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。 阅读全文
posted @ 2011-10-11 09:54 白草黒尖 阅读(582) 评论(0) 推荐(0) 编辑
  2011年10月9日
摘要: 一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 2) 每个块设备都有它自己的队列. 3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 4) 内核必须首先确定队列中一共有多少个请求,然后才开始进行调度.二) I/O调度的4种算法 1) CFQ(Completely Fair Queuing, 完全公平排队) 特点: 在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择. CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿 阅读全文
posted @ 2011-10-09 23:10 白草黒尖 阅读(6384) 评论(0) 推荐(0) 编辑
  2011年10月3日
摘要: 阅读全文
posted @ 2011-10-03 22:00 白草黒尖 阅读(240) 评论(0) 推荐(0) 编辑
  2011年9月29日
摘要: 概述 什么是makefile?或许很多Winodws程序员都不知道这个东西,因为那些Windows IDE都为你做了这个工作,但我觉得要做一个好的和professional的程序员,makefile还是要懂的。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列 阅读全文
posted @ 2011-09-29 13:16 白草黒尖 阅读(9201) 评论(2) 推荐(1) 编辑
  2011年9月27日
摘要: 1. 声明declaration 一个声明将一个名称引入一个作用域;C++在一个作用域中重复一个声明是合法的。 以下都是声明: int foo(int,int); //函数前置声明 typedef int Int; //typedef 声明 class bar; //类前置声明 extern int g_var; //外部引用声明 class bar; //类前置声明 typedef int Int; //typedef 声明 extern int g_var; //外部引用声明 friend test; //友员声明 using std::cout; //名字空间引用声明 fri... 阅读全文
posted @ 2011-09-27 19:07 白草黒尖 阅读(332) 评论(0) 推荐(0) 编辑