Question
字符串1:只含有英文字母
字符串2:含有英文字母和*,其中符号*表示匹配任意字符0或者多次,即正则表达式里面的含义。
现在给定这样的两个串,要求判断是否匹配?
bool isMatch ( const char *str1, const char *str2)
例如:str1 = “hello”, str2 = “he*o”,则二者匹配,返回true,str1 = “hello”, str2 = “he*l”,则不匹配,返回false。
Es Gilt Viele Mauern Abzubauen
Joker Lee's Blog
字符串1:只含有英文字母
字符串2:含有英文字母和*,其中符号*表示匹配任意字符0或者多次,即正则表达式里面的含义。
现在给定这样的两个串,要求判断是否匹配?
bool isMatch ( const char *str1, const char *str2)
例如:str1 = “hello”, str2 = “he*o”,则二者匹配,返回true,str1 = “hello”, str2 = “he*l”,则不匹配,返回false。
快速排序详细分析
注:REF[n]为参考资料,列于文章结尾。
看了编程珠玑Programming Perls第11章关于快速排序的讨论,发现自己长年用库函数,已经忘了快排怎么写。于是整理下思路和资料,把至今所了解的快排的方方面面记录与此。
输入:一个字符串,单词用某个特定符号分割(比如空格)
输出:一个字符串,单词顺序和原串相反
看到倒置,一般的做法是用栈,要么自己建个数组、要么STL,或者递归用程序栈。
void reverse_token() { char str[MAX] = {0}; if (scanf("%[^#]", str) != EOF) { //利用scanf的正则式特性 getchar(); reverse_token(); printf("%s ", str); } }
今天在论坛上看有laphon同学的一个问题,觉得这个问题很有意思。
原帖地址
问题援引如下:
做一个小程序的时候发现的。代码如下,使用的编译器为DEV-C++ 4.9.9.2。
如果先要求输入a,再要求输入b,那么a的值无论输入多少(少于255)输出都会是0;
反过来,如果先要求输入b,再要求输入a,那么就会正常。
这是为什么呢?请教达人解释。#include #include int main(int argc,char **argv) { unsigned char a,b; scanf("%d",&a); scanf("%d",&b); printf("a=%d,b=%d\n",a,b); scanf("%d",&b); scanf("%d",&a); printf("a=%d,b=%d\n",a,b); system("pause"); }
Linux下大多数软件都是将core和UI完全分离,很多程序原作者只提供了CLI接口,而图形化接口则由另一些人完成。这种做法不仅减小了开发难度,缩短了开发周期,松散的耦合使程序更容易移植。这和很多windows程序形成了鲜明对比,尤其是MFC的程序,core代码和UI代码杂糅到doc/view的框架里,完全没有可移植性。
这学期写大作业想做个GUI,就顺便看了下MFC,觉得MFC现在的现在的地位十分尴尬,大型项目几乎清一色SDK,小型应用则是.net的天下,MFC被用的最多的莫过于CString了。一个Application Framwork已经退化成一个单纯的Class Library了。
暑假前的小学期,又有一个不大不小的作业,决定完全在Linux编写,并且Core和UI完全分离,有时间的话想用GTK做GUI。直接用C代码设计一个稍微复杂点GTK界面简直就是自找苦吃,于是上glade。
即基类里没有虚函数。这时候派生类成员的存取时间并没有增加,但是空间上会有浪费。比如有如下两个类
class X { int a; char b; }; class Y : public X { char c; };
一个X对象占用4+1+3(padding, 假设4字节对齐) = 8字节。而一个Y对象并不是占用 4+1+1+2(padding)=8个字节,而是占用4+1+3(padding)+1+3(padding)=12个字节。编译器之所以如此设计,是为了使派生类对象中基类对象的内存结构和原始的基类对象一致,这种一致性保证了通过指针复制对象时不出错。如果按照前一种内存布局,会产生错误,比如:
这几天网络环境急剧恶化,不得不把Tor搬出来
pacman -S tor发现源里就有, 直接装之。装完以后默认的Socks绑定地址是127.0.0.1 9050, 当然也可以在配置文件里改掉:
sudo vim /etc/tor/torrc
大概在20行的位置,还有就是默认情况下tor是作为服务启动的,如果想改成手动启动,把配置文件里的RunAsDaemon的值从1改成0就行了。
Tor装好后就要给浏览器设置代理了,firefox这种支持socks代理的浏览器直接把socks代理设置为 127.0.0.1 9050就行了,配合switch proxy tools这种切换代理的插件会很方便。像opera、konqueror等不支持socks代理的浏览器就需要privoxy来帮忙了:
标签式浏览不是什么新鲜东西了,如今只要是浏览器,都支持标签浏览。但是一般的标签浏览网页开多了会很不爽。看RSS的时候随便点点标签栏就爆了,标签变得很窄,显示不出几个字,想找个页面变得无比之难。
前两天在网上闲逛看到有人说“树状标签”,立即到firefox里的add-ons里搜了一下“Tree Tab”,搜出来好几个插件。下了一个叫“Tab Kit”的插件,用了一下果然很爽,如图:

Inside the C++ Object Model Chapter 2 : The Semantics of Constructor 构造函数语义学
C++编译器会在Class的每一个构造函数中通过添加代码的方法暗中(implicit)做了下面几件事:
响应CasparAnt的号召,写了一下自己玩Linux的过程
老早我爸就开始玩Linux,不过没有装X,所以也就望而却步。直到大一遇到班上某牛S(现在投身ACM去了)玩Linux,又在宏福听了一场开源的讲座,兴趣大发,开始折腾。
我装Linux的过程那是相当曲折,Ubuntu7.04装完Grub引导出问题,那时候还不知道grub为何物,Google了N久发现ubuntu自带Grub和原来Vista Loader的Grub4Dos冲突,索性用Vista的安装盘把Vista Loader卸了,再把ubuntu重装了一遍(那时候还不会修复Grub),黑屏…又瞎折腾了几天,无果,就先扔一边去了。
过了两周,S牛不知从哪淘来一盒FC6,随便试了一下,竟然能进X了,第一次看到Gnome的桌面,那叫一个激动啊。兴奋了半天,发现缺各种驱动:显卡、声卡、网卡…没法上网、没法更新,除了玩玩小游戏,啥都做不了…于是乎又扔一边去了。
到了11月份,从遥远的波兰寄来的ubuntu 7.10的光盘到了,赶快装上,顺利进入X,以太网卡也能用了,赶紧插上根网线更新。还记得一条apt-get我至少Google了四五次才记住。接着就是解决无线网卡驱动的问题,Google到ndiswrapper,又折腾了一周。然后尝试各种软件,无休止的折腾。