本文主要是介绍步步递近网络蜘蛛(一)v1.0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*
* 名称:步步递近网络蜘蛛(一)
*
* 版本:v1.0
*
* 作者:张双喜
*
* 日期:2010.10.17
*
* 功能:从一段字符串中,找出合法的网址(在html中语法表达中正确的网址)
*
* 过程设计:
* 根据html语法规则进行筛选出网址
* 1、函数:my_strncmp(char *p, char *q, int n)
* 功能:自己模拟实现库函数strncmp
*
* 2、函数:judge_mark(char **p)
* 功能:判断是不是"<a "或" <a ",如果是,则进行下一步操作;
* 如果不是,返回NULL;
*
* 3、函数:judge_href(char **p)
* 功能:判断是不是" href",如果是,则进行下一步操作;
* 如果不是,返回NULL;
*
* 4、函数:judge_equal_mark(char **p)
* 功能:判断是不是" =",如果是,则进行下一步操作;
* 如果不是,返回NULL;
*
* 5、函数:judge_http(char **p)
* 功能:判断是不是" http",如果是,则进行下一步操作;
* 如果不是,返回NULL;
*
* 6、函数:link(char **p)
* 功能:调用2、3、4、5函数,找到正确的网址
*
* 7、函数:pritnf_link(char *p)
* 功能:打印网址
* 备注:到网址结尾时,要对结尾进行处理,否则会一块把后面的a>等其他信息也打印出来
*
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//自己实现的strncmp函数
int my_strncmp(char *p, char *q, int n)
{
int i = 0;
int count = 0;
for( i = 0; i < n; i++)
{
if(*(p+i) == *(q+i))
{
count++;
}
}
if(count == n)
{
return 0;
}
else
{
return 1;
}
}
//判断是否满足"<a "
char * judge_mark(char **p)
{
while(' ' == **p)
{
(*p)++;
}
if(0 == my_strncmp(*p, "<a ", 3))
{
*p = *p + 3;
return *p;
}
else
{
return NULL;
}
}
//判断是否满足**** href
char * judge_href(char **p)
{
while(' ' == **p)
{
(*p)++;
}
if(0 == my_strncmp(*p, "href", 4))
{
*p = *p + 4;
return *p;
}
else
{
return NULL;
}
}
//判断是否满足*** =
char * judge_equal_mark(char **p)
{
while(' ' == **p)
{
(*p)++;
}
if('=' == **p)
{
return (*p) + 1;
}
else
{
return NULL;
}
}
//判断是否满足** ["] ['] http
char * judge_http(char **p)
{
while((' ' == **p) || ('/"' == **p) || ('/'' == **p))
{
(*p)++;
}
if(('/"' == **p) || ('h' == **p) || ('/'' == **p))
{
return (*p);
}
else
{
return NULL;
}
}
//功能:生成要网址
char * link (char **p)
{
char *ret;
ret = judge_mark(p);
if(NULL != ret)
{
ret = judge_href(&ret);
}
if(NULL != ret)
{
ret = judge_equal_mark(&ret);
}
if(NULL != ret)
{
ret = judge_http(&ret);
}
return ret;
}
//打印网址
void printf_link(char *p)
{
int i = 0;
if(NULL != p)
{
while(((*(p+i) != '/"') && (*(p+i) != '/'') && (*(p+i) != '>') && (*(p+i) != '/0') && (*(p+i) != ' ')))
{
printf("%c", *(p+i));
i++;
}
printf("/n");
}
return;
}
int main(int argc, char* argv[])
{
char *ret;
char *s1 = " <a href = /"http://www.akaedu.org/"> ok </a>";
char *s2 = " <a href = http://www.akaedu.org ";
char *s3 = "< a href = http://www.akaedu.org";
char *s4 = "<a href = /" http://www.akaedu./"org";
ret = link(&s1);
printf_link(ret);
ret = link(&s2);
printf_link(ret);
ret = link(&s3);
printf_link(ret);
ret = link(&s4);
printf_link(ret);
return 0;
}
这篇关于步步递近网络蜘蛛(一)v1.0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!