C语言练习,可以解析协议,主机,路径,询问,片段等

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <ctype.h>
  5 #define MAXN 1024+10
  6 char url [MAXN] = "http://www.google.com:80/wiki/Search?search=train&go=Go#steammachine"; 
  7 
  8 int main()
  9 {
 10     const char *parseptr1;
 11     const char *parseptr2;
 12     int len;
 13     int i;
 14     parseptr2 = url;
 15     parseptr1 = strchr(parseptr2, ':');
 16     if ( NULL == parseptr1 ) {
 17         printf("URL错误!
");
 18         return 0;
 19     }
 20     len = parseptr1 - parseptr2;
 21     for ( i = 0; i < len; i++ ) {
 22         if ( !isalpha(parseptr2[i]) ) {
 23             printf("URL错误!
");
 24             return 0;
 25         }
 26     }
 27     printf("protocol: ");
 28     for(i=0;i<len;i++)
 29         printf("%c",parseptr2[i]);
 30     printf("
");//解析协议
 31     parseptr1++;
 32     parseptr2 = parseptr1;
 33     for ( i = 0; i < 2; i++ ) {
 34         if ( '/' != *parseptr2 ) {
 35             printf("URL错误!
");
 36             return 0;
 37         }
 38         parseptr2++;
 39     }
 40     parseptr1 = strchr(parseptr2, ':');
 41     if ( NULL == parseptr1 )//判断有无端口号
 42     {
 43         parseptr1 = strchr(parseptr2, '/');
 44         if ( NULL == parseptr1 ) {
 45         printf("URL错误!
");
 46         return 0;}
 47         len = parseptr1 - parseptr2;
 48         printf("host: ");
 49         for(i=0;i<len;i++)
 50            printf("%c",parseptr2[i]);
 51         printf("
");//解析主机
 52     }
 53     else{
 54     len = parseptr1 - parseptr2;
 55     printf("host: ");
 56     for(i=0;i<len;i++)
 57         printf("%c",parseptr2[i]);
 58     printf("
");
 59     parseptr1++;
 60     parseptr2 = parseptr1;
 61     parseptr1 = strchr(parseptr2, '/');
 62     if ( NULL == parseptr1 ) {
 63         printf("URL错误!
");
 64         return 0;
 65     }
 66     len = parseptr1 - parseptr2;
 67     printf("port: ");
 68     for(i=0;i<len;i++)
 69         printf("%d",(parseptr2[i]-48));
 70     printf("
");//解析端口
 71     }
 72     parseptr1++;
 73     parseptr2 = parseptr1;
 74     while ( '' != *parseptr1 && '?' != *parseptr1  && '#' != *parseptr1 ) {
 75         parseptr1++;
 76     }
 77     len = parseptr1 - parseptr2;
 78     printf("path: ");
 79         for(i=0;i<len;i++)
 80            printf("%c",parseptr2[i]);
 81         printf("
");//解析路径
 82     parseptr2=parseptr1;
 83     if ( '?' == *parseptr1 ) {
 84         parseptr2++;
 85         parseptr1 = parseptr2;
 86         while ( '' != *parseptr1 && '#' != *parseptr1 ) {
 87             parseptr1++;
 88         }
 89         len = parseptr1 - parseptr2;
 90     printf("query: ");
 91     for(i=0;i<len;i++)
 92         printf("%c",parseptr2[i]);//判断有无询问并解析
 93     printf("
");
 94     }
 95     parseptr2=parseptr1;
 96     if ( '#' == *parseptr1 ) {
 97         parseptr2++;
 98         parseptr1 = parseptr2;
 99         while ( '' != *parseptr1 ) {
100             parseptr1++;
101         }
102         len = parseptr1 - parseptr2;
103     printf("fragment: ");
104     for(i=0;i<len;i++)
105         printf("%c",parseptr2[i]);
106     printf("
");//判断有无片段并解析
107         
108     }
109 }
View Code
原文地址:https://www.cnblogs.com/tianciliangen/p/3408164.html