1. [代码]容易写成自己输入URL,这里测试一个例子     
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAXN 1024+10
char url [MAXN] = "http://www.google.com:80/wiki/Search?search=train&go=Go#steammachine";
 
int main()
{
    const char *parseptr1;
    const char *parseptr2;
    int len;
    int i;
    parseptr2 = url;
    parseptr1 = strchr(parseptr2, ':');
    if ( NULL == parseptr1 ) {
        printf("URL错误!\n");
        return 0;
    }
    len = parseptr1 - parseptr2;
    for ( i = 0; i < len; i++ ) {
        if ( !isalpha(parseptr2[i]) ) {
            printf("URL错误!\n");
            return 0;
        }
    }
    printf("protocol: ");
    for(i=0;i<len;i++)
        printf("%c",parseptr2[i]);
    printf("\n");//解析协议
    parseptr1++;
    parseptr2 = parseptr1;
    for ( i = 0; i < 2; i++ ) {
        if ( '/' != *parseptr2 ) {
            printf("URL错误!\n");
            return 0;
        }
        parseptr2++;
    }
    parseptr1 = strchr(parseptr2, ':');
    if ( NULL == parseptr1 )//判断有无端口号
    {http://www.huiyi8.com/hunsha/chuangyi/
        parseptr1 = strchr(parseptr2, '/');
        if ( NULL == parseptr1 ) {
        printf("URL错误!\n");
        return 0;}创意婚纱照片
        len = parseptr1 - parseptr2;
        printf("host: ");
        for(i=0;i<len;i++)
           printf("%c",parseptr2[i]);
        printf("\n");//解析主机
    }
    else{
    len = parseptr1 - parseptr2;
    printf("host: ");
    for(i=0;i<len;i++)
        printf("%c",parseptr2[i]);
    printf("\n");
    parseptr1++;
    parseptr2 = parseptr1;
    parseptr1 = strchr(parseptr2, '/');
    if ( NULL == parseptr1 ) {
        printf("URL错误!\n");
        return 0;
    }
    len = parseptr1 - parseptr2;
    printf("port: ");
    for(i=0;i<len;i++)
        printf("%d",(parseptr2[i]-48));
    printf("\n");//解析端口
    }
    parseptr1++;
    parseptr2 = parseptr1;
    while ( '\0' != *parseptr1 && '?' != *parseptr1  && '#' != *parseptr1 ) {
        parseptr1++;
    }
    len = parseptr1 - parseptr2;
    printf("path: ");
        for(i=0;i<len;i++)
           printf("%c",parseptr2[i]);
        printf("\n");//解析路径
    parseptr2=parseptr1;
    if ( '?' == *parseptr1 ) {
        parseptr2++;
        parseptr1 = parseptr2;
        while ( '\0' != *parseptr1 && '#' != *parseptr1 ) {
            parseptr1++;
        }
        len = parseptr1 - parseptr2;
    printf("query: ");
    for(i=0;i<len;i++)
        printf("%c",parseptr2[i]);//判断有无询问并解析
    printf("\n");
    }
    parseptr2=parseptr1;
    if ( '#' == *parseptr1 ) {
        parseptr2++;
        parseptr1 = parseptr2;
        while ( '\0' != *parseptr1 ) {
            parseptr1++;
        }
        len = parseptr1 - parseptr2;
    printf("fragment: ");
    for(i=0;i<len;i++)
        printf("%c",parseptr2[i]);
    printf("\n");//判断有无片段并解析
         
    }
}

最新文章

  1. Linux虚拟机中配置JDK环境变量
  2. Sql Server创建函数
  3. three.js全景
  4. Psam_ISO7816
  5. 基础知识系列☞GET和POST→及相关知识
  6. C# WinForm开发系列 - ComboBox
  7. 深入理解Linux内核-第七章 进程调度
  8. MVC个人认为的终极分页
  9. isNotNull与isNotEmpty的区别
  10. Unity3D之Legacy动画系统学习笔记
  11. QT全局热键(用nativeKeycode封装API,不跨平台)
  12. C#中关键字 &#39;User&#39; 附近有语法错误
  13. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)
  14. 在chrome console添加jQuery支持
  15. 异步编程(async&amp;await)
  16. Linux 中的 tar
  17. spring-boot-starter-data-elasticsearch 整合elasticsearch 5.x详解
  18. Java Web项目总结
  19. Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
  20. python安装lib库

热门文章

  1. IT行业是吃青春饭的吗?
  2. Micro:Bit手柄试用之一MagicPad (解决蓝牙与gamePad包共存)
  3. scramble-string——两个字符串经过树化并旋转后是否一致、递归、动态规划
  4. BZOJ 1293 SCOI2009 生日礼物 堆
  5. SQL存在一个表而不在还有一个表中的数据
  6. 菜鸟运维笔记:配置Apache二级域名及WWW訪问
  7. ORACLE物化视图具体解释
  8. 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
  9. Jquery系列问题
  10. java 白皮书的关键术语