Lin's profile漫天的梧桐雨PhotosBlogLists Tools Help

Welcom!!!

Best Buy Computer
Photo 1 of 28

琳 琳

Lists

漫天的梧桐雨

Work hard , Play harder !
October 28

2008年10月27号13号地铁站我被让座一次

让座的是个40岁左右个子不高瘦瘦的中年男子。
汗。。。。。
October 18

别让自己过时

以往在信箱里面总是收到“xx邀请您加入开心网/校内网/土豆网" ,我都把他们当作垃圾邮件直接放到垃圾箱里面,前不久又有几个朋友,他们在facebook上面聊的不亦乐乎,而我竟然不知道这些网站的功能,只是把他们当作一种在垃圾网站上的不明痕迹。在一番尝试之后,呵呵,真的是很好玩,竟然碰到那么多的熟人,于是从那天开始,让自己也跟上了时代的步伐。咱们facebook聊!
October 04

我的游记

阳光明媚10月1,老爸老妈老公和老婆在凤凰山一日游。
 b2usus2爸爸妈妈
以此长恨歌来记下两段可歌可泣的爱情故事,祝愿老爸老妈健康长寿,永葆青春。
七月七日长生殿,夜半无人私语时。
在天愿作比翼鸟,在地愿为连理枝。
天长地久有时尽,此恨绵绵无绝期。
 
September 23

说说印度的人和事

之前,大家听说我要去,都是一种我要赈灾或者是我很惨,怎么被派到了去那么一个不卫生、不安全、不发达的落后地方,一脸鄙夷的表情。其实推动我去的最大动力就是我要坐飞机啦,于是怀着对第一次乘飞机的向往,其他的统统被抛到了脑后,我就踏上了征途。
之中,我觉得我去过,我很有发言权,有很多事情我想说,完全不是大家所想的那样。
1. Hi Ma'am, 这是当地人对女士的称呼。 我很enjoy这个title,有点港台剧里面对女警官的称呼;
2. 实在厚道的印度人。 到了国外,自己就是车头彻底的老外了。 去了那边,我们就是要刺激消费,因此接触最多的就是买东西的人,不管是饭店、商场、或者是马路边的摊贩。 那里的bargain的方式和中国完全不一样, 比如一个10INR的东西,我还价到7INR,最后达成是8INR. 如果你想讲的话,可以继续还到7.5INR,这是完全可以的。 这要是在中国,非被骂不可。 还有问路, 在中国的街边,不过你不买他的东西,他很难给你热情的之路,而在印度,这个小贩就会热情的把你带到你想去的地方。
3. 奥运会的举行,虽然在国内没有让我感到什么益处,除了便利的地铁,飞涨的物价,到处的铁丝网。  可是在印度真让我实实在在为from China自豪了一把。 当地人一听,China,顿时,别说了,你就是大明星,喀嚓喀嚓,在你面前的只有闪光灯。
4. 在印度,每个厕所都会有洗手的水龙头,没有手纸, 左手是用来上厕所, 右手是用来吃饭的,只用一只手就会把一张厚厚的饼给撕开。
5.印度有很多宗教,几乎每个人都会信他们自己的god,这是家族遗传下来的。 我说中国人只相信自己,他们感觉到很吃惊。 印度教不吃牛肉,穆斯林不吃猪肉。大街上到处是流浪的牛、狗。 所以,我们总结,做牛要来印度,做人还是回中国吧。
6. 印度的婚姻是实行的一夫一妻制。但是他们不计划生育。一个同事Sara的grandma生了26个孩子,真是super woman。 相信不久的未来,印度会赶超中国,变成世界第一人口大国。他们的婚姻大都是arranged marriage by their parents,男女双方在结婚前都没有见过面。 这在中国是非常不可思议的。 sign,可惜了Ali帅哥啊。
7. 印度有18种语言,18种文字,这和中国南北方言是不一样的,中国方言虽然发音不同,可是文字相同。 印度英语是最通用的语言,南方和北方人交流的时候也只能用英语。 基本上,所有的印度人都会讲英语,他们很是为这点自豪。
8. Bangalore是印度的的硅谷,可也只有园区的地方比较像城市,想西二旗软件园。印度街上全是摩托车,三轮的兔兔taxi,少量的汽车,当然也会有高级的车,那里贫富分化严重,没有自行车。空气污染很严重。
 
其他的欢迎大家补充。
 9. 这点需要补充一下啦。我所接触的印度人里面,没有人身上有咖喱的味道。至少我是没有闻出来。
10.还有咖喱,印度没有咖喱,这个应该是中国人自己创出来的,就像印度抛饼,完全是中国人的发明。在印度,对应于我们所说的咖喱,其实是好多种不同香料的集合,他们称为MASALA,对应羊肉、鸡肉、和米饭有不同种类的MASALA。
印度也是有非常渊源历史的国家。 我很喜欢哪里的人。
 
July 13

我的淘宝店开张啦!!!

前些日子, 闲来无事,和朋友双儿聊天。
谈谈现在的日子,谈谈未来的时光,想想自从上了班之后就失去了好多闲暇的日子,尤其是没有时间去逛、买PP的衣服。
何不开家小店?自己有好看的衣服穿,而且在闲来无事的时候让自己有个正当的理由去逛街,上网和聊天,哈哈。
这家就是我们的小店http://shop36052201.taobao.com/
掌柜是:双子姐妹2008, 店名(哈哈):子姐妹的琅满屋
 
店名包含两个人的名字,很有玄机呢。
主营是女装哦,MM们快去看看哦;男生朋友,不好意思哦,不过可以推荐gf来哦
小店才开张, 大家帮忙看看,提提意见啊,要是有喜欢的朋友尽快拍啊,只要留言,成本价给哦~~
 
December 25

幸运52上蓝色的我

CCTV-2 幸运52,2006-52期
蓝色选手就是我!!!
播出时间: 2006年12月29日周五,19:30 CCTV-2
 
欢迎大家准时收看!!
 
PS:28号周四晚上CCTV-1的23:33会首播,不过导演说cctv-1节目会比cctv-2的短13分钟,镜头还是cctv-2的多呀!!
 
December 18

论文论文,毕业遥遥无期

多传感器遥感图像的融合及目标识别算法研究
多深奥的题目啊,
多厉害的论文啊,
多紧迫的deadline 啊,
可惜到现在一点思路也没有,
看来硕士也不是好混的,
天知道怎么做论文,
想了2年都不知道怎么做,
要我1个月搞定论文,
真是#※!#×~※
真希望一个月以后,我会由衷的说“×××!!!”
December 03

Perl的正则表达式匹配

  以前总觉得perl匹配很难,很抽象,其实找对文章,一看,写个小程序也蛮简单的。哈哈
 
以下search的结果:

如果在Unix中曾经使用过sde,awk,grep这些指令的话,相信对于 Perl 语言中的文字处理模式(Regular Expression)应该不会感到陌生才对。在Perl语言中因为有这个功能,所以对于字符串的处理能力是非常强有力的。Regular Expression可视为用来处理字符串的一种模式(pattern),其使用的格式为/pattern/。在Perl语言的程序中,经常可以看到类似语法的应用,在CGI程序设计中也不例外。只要能够善用文字处理模式的话,要处理任何难的字符串皆可迎刃而解,在本章中笔者会用深入浅出的方式来介绍Regular Expression的用法。

一 文字处理模式中,/pattern/常用到的语法

/pattern/ 结果

除了换行字符\n外,找寻只有一个字符的字符串

x? 找寻0个或是1个x字符

x* 找寻0个或是0个以上的x字符

.* 找寻0个或是0个以上的任何字符

x+ 找寻0个或是1个以上的x字符

.+ 找寻1个或是1个以上的任何字符

{m} 找寻刚好是m个个数指定的字符

{m,n} 找寻在m个数个数以上,n个个数以下指定的字符

{m,} 找寻m个个数以上指定的字符

[] 找寻符合[]内的字符

[^] 找寻不符合[]内的字符

[0-9] 找寻符合0到9的任何一个字符

[a-z] 找寻符合a到z的任何一个字符

[^0-9] 找寻不符合0到9的任何一个字符

[^a-z] 找寻不符合a到z的任何一个字符

^ 找寻字符开头的字符

$ 找寻字符结尾的字符

\d 找寻一个digit(数字)的字符,和[0-9]语法一样

\d+ 找寻一个digit(数字)以上的字符串,和[0-9]+语法一样

\D 找寻一个non-digit(非数字)的字符,和[^0-9]语法一样

\D+ 找寻一个non-digit(非数字)以上的字符,和[^0-9]+语法一样

\w 找寻一个英文字母或是数值的字符,和[a-zA-Z0-9]语法一样

\w+ 找寻一个以上英文字母或是数值的字符,和[a-zA-Z0-9]+语法一样

\W 找寻一个非英文字母,数值的字符,和[^a-zA-Z0-9]语法一样

\W+ 找寻一个以上非英文字母,数值的字符,和[^a-zA-Z0-9]+语法一样

\s 找寻一个空白的字符,和[\n\t\r\f]一样

\s+ 找寻一个以上空白的字符,和[\n\t\r\f]+一样

\S 找寻一个非空白的字符,和[^\n\t\r\f]一样

\S+ 找寻一个以上非空白的字符,和[^\n\t\r\f]+一样

\b 找寻一个不以英文字母,数值为边界的字符串

\B 找寻一个以英文字母,数值为边界的字符串

a|b|c 找到符合a字符或是b字符或是c字符的字符串

abc 找到一个含有abc的字符串

(pattern) ()这个符号是会记忆所找寻到的字符,是一个很实用的语法

第一个()内所找到的字符串变成$1这个变量或是\1变量

第二个()内所找到的字符串变成$2这个变量或是\2变量

以此类推,笔者会在下一小节中详细介绍它的用法

/pattern/i i这个参数是代表忽略英文大小写的意思,也就是在找寻字符 串的时候,不会去考虑英文的大小写

\ 如果要在pattern模式中找寻一个有特殊的意义的字符,要在 这个字符前加上\这个符号,这样才会让这个特殊字符失效

二 文字处理模式(Regular Expression)的简单范例

看了上一小节文字处理模(Regular Expression)之的,初学者对于这个语法的应用可能还不是很清楚,所以笔者会在这一小节中,举出一些在文字处理模式中常用的范例给大家看看:

范例 说明

/perl/ 找到含有perl的字符串

/^perl/ 找到开头是perl的字符串

/perl$/ 找到结尾是perl的字符串

/c|g|i/ 找到含有c或g或i的字符串

/cg{2,4}i/ 找到c后面跟着2个到4个g,再跟着i的字符串

/cg{2,}i/ 找到c后面跟着2个以上g,再跟着i的字符串

/cg{2}i/ 找到c后面跟着2个g,再跟着i的字符串

/cg*i/ 找到c后面跟着0个或多个g,再跟着i的字符串,如同/cg{0,1}i/

/cg+i/ 找到c后面跟着一个以上g,再跟着c的字符串,如同/cg{1,}i/

/cg?i/ 找到c后面跟着0个或是一个g,再跟着c的字符串,如同/cg{0,1}i/

/c.i/ 找到c后面跟着一个任意字符,再跟着i的字符串

/c..i/ 找到c后面跟着二个任意字符,再跟着i的字符串

/[cgi]/ 找到符合有这三个字符任意一个的字符串

/[^cgi]/ 找到没有这三个字符中任意一个的字符串

/\d/ 找寻符合数值的字符串

可以使用/\d+/来表示一个或是多个数值的字符串

/\D/ 找寻符合不是数值的字符串

可以使用/\D+/来表示一个或是更多个非数值的字符串

/\w/ 找寻符合英文字母,数值的字符串

可以使用/\w+/来表示一个或是更多个英文字母,数值的字符串

/\W/ 找寻符合非英文字母,数值字符的字符串

可以使用/\W+/来表示一个或是更多个非英文字母,数值的字符串

/\s/ 找寻符合空白的字符串

可以使用/\s+/来表示一个或是更多个空白字符的字符串

/\S/ 找寻符合不是空白的字符串

可以使用/\S+/来表示一个或是更多不是空白的字符的字符串

/\*/ 找寻符合*这个符号的字符串,因为*在文字处理模式中有它的特殊意思,所以要在这个特殊符号前加上\这个符号,这样才会让这个特殊字符失效

/abc/i 找寻符合abc的字符串而且不考虑这些符合字符串的大小写

三 文字处理模式(Regular Expresion)相关的运算符及函数

在perl程序写作中常会用到=~和!~这两个运算符及s和t这二个函数来和文字处理模式/pattern/搭配而成一个运算式,如果能够活用这些指令的话,就可以很。轻易地来处理一些字符串,当然在CGI程序设计中了就更能得心应手了。现在就让作者来介绍这些运算符及函数的用法:

--------------------------------------------------------------------------------

指令:/pattern/文字运算

说明: 如果在文字运算中没有使用=~或是!~运算符指定一个字符串来做运算的话,就会使用内定的输出变量$_来做/pattern/文字运算。

范例一:

$string="chmod711cgi";

$string=~/(\W)\s+(\d+)/;

第一个(\W+)是********数个字母,并将的找到的字符串指派给$1这个变量,而\s+********多个空白的字符串,最后(\d+)********个数值,并将所找到的字符串指派给$2这个变量。所以$1="chmod";$2=711;但是$string还是等于原来的字符串,没有改变。

范例二:

$_="chmod711cgi";

/(\W)\s+(\d+)/;

因为是把字符串指定给$_这个变量,所以可以不用=~这个运算符就会得到

$1="chmod";$2=711;而且$_还是等于原来的字符串,没有改变。

范例三:

$string="chmod711cgi";

@list=split(/s+/,$string);

以上一个或是多个空白字符来分割$string这个字符串,这是一个很常用的语法。此时@list=("chmod","711","cgi");

--------------------------------------------------------------------------------

指令: =~相配运算符

说明:这是Perl语言中特有的语法,通常会和文字处理来作运算。

范例:

print"请输入一个字符串!\n";

$string=<STDIN> #<STIDN>********输入,会让使用者输入一字符串

chop($string); #将$string最后一个换行的字符\n删除掉

if($string=~/cgi/){

print("输入的字符串中有cgi这个字符串!\n";

}

如果输入的字符串含有cgi这个字符串的话,就会显示出这个信息。

--------------------------------------------------------------------------------

指令:!~不相配运算符

说明:这也是Perl语言中特有的语法,通常会和文字处理模式来运算。

范例:

print"请输入一个字符串!\n";

$string=<STDIN> #<STIDN>********输入,会让使用者输入一字符串

chop($string); #将$string最后一个换行的字符\n删除掉

if($string!~/cgi/)

{

print("输入的字符串中有cgi这个字符串!\n";

}

如果输入的字符串中没有cgi这个字符串的话,就会显示出这个信息。

--------------------------------------------------------------------------------

指令:tr转换函数

语法:tr/SEARCHLIST/REPLACELIST/

其中SEARCHLIST是要转换的字符;REPLACELIST是转换成何种字符。

说明:tr(translate)就是转换的意思,会把符合转换的字符转换成要转换的字符。

范例一:

$string="testing";

$string=~tr/et/ET/"; #此时$string="TEsTing";

$string=~tr/a-z/A-Z/; #此时$stirng="TESTING";

范例二:

$string="CGI+Perl";

$string=~tr/+//; #此时$string="CGI Perl";

在传送CGI数据的时候会先将数据编码,其中会将空白的字符转成+这个字符。

--------------------------------------------------------------------------------

指令:s 取代函数

语法:s/PATTERN/REPLACE/eg

其中

PATTERN是文字处理(Regular Expresion)的模式;

REPLACE是代表取代成何种文字模式。

而g是这个函数最常用的参数,********所有符合文字模式的字符串全部取代,如果省略这个参数的话,则只取代一个符合文字模式的字符串中;

而加上e这个参数代表要将REPLACE的部分当成一个运算式,如果没有这个需要的话,就不用加上这个参数了。

说明:将符合文字处理模式的字符串取成为要取代的字符串

范例一:

$string="i:love:perl";

$string=~s/:/*/; #此时$string="i*love:perl";

$string=~s/:/*/g; #此时$string="i*love*perl";

$string=~s/*/+/g; #此时$string="i+love+perl";

$string=~s/+//g; #此时$string="i love perl";

上一行也可写成 $string=~tr/+//;效果都会一样哦!

$string=~s/perl/cgi; #此时$string="i love cgi";

范例二:

$string=~s/(love)/<$1>/;

第一个()内所找到的字符串变成$1,在这个范例中,会把变量love这个字符串变成<love>,此时$string="i<love>perl";

$string="i love perl";

$string=~s(i)(perl)/<$1><$2>/;

在这个范例中,会把i变成<i>perl变成<perl>,此时$string="<perl> love <i>";

$string="i love perl";

$string=~s(\W+)/<$1>/g;

(/w+)********符合一个或是多个英文字符或是数值的字符串,之后再将找到的字符串设成$1。因为加上g这个参数,所以会找到字符串的这三个英文单字,然后再把这三个单字分加上<>这个符号,此时$string="<perl><love><i>";

范例三:

$string="www22cgi44";

$string=~s/(\d+)/$1*2/e;

(/d+)********寻$string中一个或是多个数值的字符串,再将找到的字符串设成$1。加上参数e是代表要把$1*2当作是一个运算式,所以$string="www22cgi44";

$string="www22cgi44";

$string=~s/(\d+)/$1*2/eg;

加上参数e,所以会把$1*2当作是一个运算符式来看;加上参数g就会把全部符合数值的字符串经过运算式运算之后再把它取代,所以$string="www44cgi88";

范例四:

假设原本的字符串是$value="三八!",经CGI数据编码之后,这个字符串就会变成

$value="%A4T%A4K%21"。以下是一个解码的示范程序:

$value="%A4T%A4K%21";

$vlaue=~s/%([a-fA-F0-9][a-fA-F0-9]/pack("c",hex($1))/eg;

在传送CGI数据的时候会把数据编码,其中会将特殊字符或是中文字符编码以%开头的连续的两个十六进制数的字符串,所以要用s这个函数来找寻这个以%开头的字符串。为了要把找到的字符串再做解码的处理,所以要在%这个符号之后加上()这个符号,表示会把找到的字符串记忆起来并指定给$1这个变量,而且要在()中加上********续两个十六进制数值的文字处理模式(Regular Expression),也就是[a-fA-F0-9][a-fA-F0-9]。再用hex这个函数($1是********的字符串)把十六进制数值转成十进制的码,之后再用pack这个函数(以C为参数,是********gned char value的意思)把这个十进制码还原成原来的字符串。最后就会把这个字符串解码成$value="三八!"。值得一提的是也可以把这个解码的程序写成:

$value=~s/%(..)/pack("C",hex($1))/eg;

December 01

北京 vs 上海

都在同一天,一个上午一个下午,
我接到上海的电话
bf接到北京的电话
Dow 的IT打给我的
1院14所打给bf
 
不知道这是好消息还是坏消息
不知道该去北京还是上海
不知道该放弃哪一边
 
不过这么多天的讨论斗争
应该是我放弃吧
真是不太甘心,不忍心啊
5555555555555555555
大哭一场,别了陶氏~~~
 
还有思科, 9500/m和股票~~~
88 cisco
November 24

字符串真奇妙

1 。 memset, memcpy 和 strcpy 的区别
      strcpy
   extern char *strcpy(char *dest,char *src);
   #include <string.h>
   功能:把src所指由NULL结束的字符串复制到dest所指的数组中
   说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
   返回指向dest的指针

  memcpy
  extern void *memcpy(void *dest,void *src,unsigned int count);
  #include <string.h>
   功能:由src所指内存区域复制count个字符串到dest所指内存区域.
   说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针.
  
   memset
   extern void *memset(void *buffer,int c,int count);
   #include <string.h>
   功能:把buffer所指内存区域的前count个字节设置成字符c
   说明:返回指向buffer的指针.

二.区别
    memset 用来对一段内存空间全部设置为某个字符,一般用于在对定义的字符串初始化为' '或者'\0';
    例: char a[100];
          memset(a,'\0',sizeof(a));
   
   memcpy 是用来做内存拷贝,可以用来拷贝任何数据类型的对象,可以指定拷贝的数据长度;
   例:
           char a[100],b[50];
           memcpy(b,a,sizeof(b));   //注意:如果使用sizeof(a),会造成内存溢出
           mem是一段内存,他的长度,必须自己记住.memcpy是见着什么拷贝什么。
   
    strcpy 就只能拷贝字符串,它遇到'\0'就结束拷贝;
      例:char a[100],b[50];
              strcpy(a,b);
              如用strcpy(b,a)要注意a中的字符串长度(第一个'\0'之前) 是否超过50,如果超过,则会造成b的
  内存溢出.它是不会拷贝'\0'的,所以一般还有加一个语句:
              *a='\0';
  
 三.使用技巧
      memset 可以方便的清空一个数据结构的变量或数组.
      如:
        struct sample_struct
       {
              char  csName[16];
              int iSeq;
              int iType;
       };
       对于变量
       struct sample_struct  stTest;
       一般情况下,初始化stTest的方法:
        stTest.csName[0]='\0';
        stTest.iSeq=0;
        stTest.iType=0;
    而用memset:
       memset(&stTest,0,sizeof(struct sample_struct));
    如果是数组:
    struct sample_struct  TEST[100];
    memset(TEST,0,sizeof(struct sample_struct)*100);
     
2。 内存及字符串操作篇
bcmp
bcopy
bzero
index
memccpy
memchr
memcmp
memcpy
memmove
memset
rindex
strcasecmp
strcat
strchr
strcmp
strcoll
strcpy
strcspn
strdup
strlen
strncasecmp
strncat
strncpy
strpbrk
strrchr
strspn
strstr
strtok