2013年5月31日

1个小爬虫程序的学习记录

摘要: 今天学习使用python编写一个最简单的小爬虫程序,遇到了许多问题,最终终于解决。现记录中途遇到的困难和解决方法。程序功能:从电影天堂网站读取“最新电影下载”列表内容。用到知识:python的urllib2模块读取网页内容,然后使用re匹配并提取内容。附加问题:字符编码问题。代码:# coding: utf8#! /usr/bin/env pythonimport urllib2,reurl='http://www.dytt8.net/'data=urllib2.urlopen(url).read().decode('gbk')u8data=data.encod 阅读全文

posted @ 2013-05-31 20:12 knd2 阅读(194) 评论(0) 推荐(0) 编辑

2013年3月25日

C语言中字符指针赋值""和NULL的区别

摘要: 在C程序中对一个字符指针赋值""和NULL是不一样的,代码如下:char *p="";char *q=NULL;前者为p分配了内存空间用于保存一个指针(32位机上及4字节),后者不为q分配空间。所以调用strlen时,前者返回0,后者将产生错误。同样,用printf的%p打印二者的地址时,前者会返回一个32位的地址值,而后者则返回(nil)。注:以上在gcc下调试。 阅读全文

posted @ 2013-03-25 17:49 knd2 阅读(331) 评论(0) 推荐(0) 编辑

2013年3月12日

linux下的工作目录切换实现

摘要: 因为linux中使用chdir和fchdir来修改当前的工作目录,他们都是修改当前进程的工作目录。linux不提供修改其它进程当前目录的系统调用,所以bash中的cd命令只能是内建命令,而非一个单独的来实现切换工作目录的程序。并且通常可以利用open打开一个目录,然后利用fchdir来切换工作目录。因为这样只利用目录的文件描述符来实现切换,这些信息都缓存在了目录的inode中,而inode被缓存,所以效率更高;而使用chdir需要逐级解析每个目录项,降低了执行效率。 阅读全文

posted @ 2013-03-12 11:10 knd2 阅读(276) 评论(0) 推荐(0) 编辑

2013年3月11日

选择默认执行程序--update-alternatives

摘要: 因为学习vim的剪贴板,所以又安装了gvim。安装后查看gvim的程序位置,发现/usr/bin/gvim指向/etc/alternatives/gvim,而后者又指向/usr/bin/gvim-normal。好奇/etc/alternatives这个目录的作用,所以上网查找。OpenSUSE上使用update-alternatives这个多软件版本控制软件,可以设置当你在bash中输入一个命令时会执行哪一个软件(默认软件)。它的本质是通过设置链接文件实现的。常用选项name:该链接在/etc/alternatives/目录下的文件名;link:链接的通用路径链接,对应关系是link-> 阅读全文

posted @ 2013-03-11 15:57 knd2 阅读(199) 评论(0) 推荐(1) 编辑

转:让vim支持系统剪贴板

摘要: 转自:http://blog.sina.com.cn/s/blog_76550fd701019rol.html1. 在vim里面写原创文章,或者转帖自己看到的经典文章;2. 在vim里面写好之后,排好版,然后,快捷键操作:gg, shift+V, shift + G,"+y,解释:"+y是把选中内容复制到系统剪切板里3. ctrl + M 打开opera mail,粘贴之;4. 写好主题,直接发送到我的博客关联邮箱;ok, 一篇文章完成了。所有的剪切、复制、粘贴操作都在vim寄存器+和系统剪切粘贴板之间切换完成。vim的寄存器+是和系统剪切板关联的,即:"+y 复 阅读全文

posted @ 2013-03-11 14:53 knd2 阅读(231) 评论(0) 推荐(0) 编辑

二叉查找树的C实现

摘要: 查询关键字代码如下:struct node * tree_search(struct node *root,int key){ struct node* x=root; if(x==NULL) { return x; } while(x!=NULL&&key!=x->key) { if(key<x->key) x=x->left; else x=x->right; } return x;}寻找最小关键字结点代码如下:struct node * minimum(s... 阅读全文

posted @ 2013-03-11 14:47 knd2 阅读(173) 评论(0) 推荐(0) 编辑

C中指针传递的一个错误--二级指针的传值问题

摘要: 在写查找树排序的代码时,遇到了根指针传值的问题。添加一个结点的函数签名如下:struct node * tree_insert(struct node **root ,int key);向该函数传递树根指针,并且希望能够修改树根指针的指向,所以传递树根指针的地址。在该函数中使用一个二级指针(同为root)来保存指针树根的地址。当向树中添加第一个结点时,需要修改树根指针的指向。在该函数中添加的新结点为ret,所以修改的语句应该为:*root=ret;而不是:root=&ret;后者修改了root的指向,此时*root不再指向树根指针;而前者则是修改树根指针的指向,使得树根指针指向新的树根 阅读全文

posted @ 2013-03-11 14:04 knd2 阅读(298) 评论(0) 推荐(0) 编辑

2013年3月10日

memcpy和memmove的区别

摘要: memcpy实现:char *memcpy(void *s1, const void * s2, size_t n){ char *su1; const char *su2; for(su1=s1,su2=s2; 0<n; ++su1, ++su2, --n) *su1=*su2; return s1;}memcpy可能造成因内存区域重叠造成的复制错误,但是它的执行速度很快,适用于已确定源和目标不会重叠的情况。memmove实现:void * memmove( void *s1, const void *s2, size_t n){ char * s... 阅读全文

posted @ 2013-03-10 20:39 knd2 阅读(213) 评论(0) 推荐(0) 编辑

2013年3月9日

sed命令

摘要: 使用sed以行为单位进行文本处理的命令,格式如下:sed -nirf 动作 文件名n:以静默模式执行sed,此时sed修改后的结果不会在终端显示;i:直接将修改内容反映到原文件中,修改后的结果不会在终端显示;r:支持扩展正规表达式;f:直接将sed的动作写道一个脚本文件中, 在f后加该脚本名可以执行其中的动作。动作:[n1,n2]functionfunction可以为一下选项:a:添加一行;i:在指定行之前加一行;d:删除指定行;c:取代指定行;p:打印指定行;s:字符串替换。 阅读全文

posted @ 2013-03-09 15:57 knd2 阅读(133) 评论(0) 推荐(0) 编辑

2013年3月5日

排序算法之堆排序

摘要: 本笔记用数组实现大顶堆,分为三个步骤。1. Max_Heapify:保持堆特性该过程假设结点i的两棵子树分别是大顶堆。当i插入后,需要根据i与子节点的大小比较,对新树进行调整,以使其仍为一个堆。比较i与字节点大小,用largest记录3个结点中的较大者。如果i最大,则新树仍为堆无需调整;否则交换i和largest,然后对以新的largest结点为根的子树递归调用该过程,直到叶子结点。代码如下:void Max_Heapify(int a[],int i,int n){ int l,r,temp,largest=i; l=2*i+1; r=2*i+2; if(l<n&&a. 阅读全文

posted @ 2013-03-05 21:11 knd2 阅读(204) 评论(0) 推荐(0) 编辑

导航