百度试题讲解:辨别url

编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
如下形式叫做首页:
militia.info/
www.apcnc.com.cn/

http://www.cyjzs.comwww.greena888.com/

www.800cool.net/

http://hgh-products.my-age.net/

如下形式叫做目录页:
thursdaythree.net/greenhouses–gas-global-green-house-warming/

http://www.mw.net.tw/user/tgk5ar1r/profile/

http://www.szeasy.com/food/yszt/chunjie/

www.fuckingjapanese.com/Reality/
请注意:
a) url有可能带http头也有可能不带
b)动态url(即含有”?”的url)的一律不算目录页,如:
www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/
www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/
另:如果你会linux,请用linux下的grep命令实现第2题的功能(附加5分)。

解答:(思想,利用设标志位判断)
代码很简洁,我就不讲解了,欢迎讨论最好的方法~~

/*
 * FileName: AnalyseUrl.cpp
 * Type: C++
 * Copyright: (c) 2009 Jingyi Xiao
 * Authors: Jingyi Xiao
 * Description:
 */

#include iostream
#include cstring

using namespace std;

int AnalyseUrlDo(char urls[][100], int n){
  int main_flag = 1, else_flag = 0;
  int count_main;
  for (int i = 0; i < n; i++){
    if (strncmp ("http:", urls[i], 5) == 0) main_flag = 3;
    else main_flag = 1;
    count_main = 0;
    else_flag = 0;

    for (int j = 0; urls[i][j] != '/0'; j++){
      if (urls[i][j] == '/' && count_main <= main_flag) ++count_main;
      else if (urls[i][j] == '?') ++else_flag;
    }

    if (count_main == main_flag && else_flag == 0)
      cout << urls[i] << " : main url" << endl;
    else if (else_flag == 0)
      cout << urls[i] << " : dir url" << endl;
    else
      cout << urls[i] << " : else url" << endl;
  }
}

int AnalyseUrl (){
  char datas[11][100] = {"militia.info/",
      "www.apcnc.com.cn/",
      "http://www.cyjzs.comwww.greena888.com/",
      "www.800cool.net/",
      "http://hgh-products.my-age.net/",
      "thursdaythree.net/greenhouses--gas-global-green-house-warming/",
      "http://www.mw.net.tw/user/tgk5ar1r/profile/",
      "http://www.szeasy.com/food/yszt/chunjie/",
      "www.fuckingjapanese.com/Reality/",
      "www.buddhismcity.net/utility/mailit.php?l=/activity/details/3135/",
      "www.buddhismcity.net/utility/mailit.php?l=/activity/details/2449/"  };

  AnalyseUrlDo(datas, 11);
  return 0;
}
附加问题:至于grep,我还暂时没想到好的方法,有没有哪位仁兄在这里补充一下你的思想???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值