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错误!\n");

 18         return 0;

 19     }

 20     len = parseptr1 - parseptr2;

 21     for ( i = 0; i < len; i++ ) {

 22         if ( !isalpha(parseptr2[i]) ) {

 23             printf("URL错误!\n");

 24             return 0;

 25         }

 26     }

 27     printf("protocol: ");

 28     for(i=0;i<len;i++)

 29         printf("%c",parseptr2[i]);

 30     printf("\n");//解析协议

 31     parseptr1++;

 32     parseptr2 = parseptr1;

 33     for ( i = 0; i < 2; i++ ) {

 34         if ( '/' != *parseptr2 ) {

 35             printf("URL错误!\n");

 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错误!\n");

 46         return 0;}

 47         len = parseptr1 - parseptr2;

 48         printf("host: ");

 49         for(i=0;i<len;i++)

 50            printf("%c",parseptr2[i]);

 51         printf("\n");//解析主机

 52     }

 53     else{

 54     len = parseptr1 - parseptr2;

 55     printf("host: ");

 56     for(i=0;i<len;i++)

 57         printf("%c",parseptr2[i]);

 58     printf("\n");

 59     parseptr1++;

 60     parseptr2 = parseptr1;

 61     parseptr1 = strchr(parseptr2, '/');

 62     if ( NULL == parseptr1 ) {

 63         printf("URL错误!\n");

 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("\n");//解析端口

 71     }

 72     parseptr1++;

 73     parseptr2 = parseptr1;

 74     while ( '\0' != *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("\n");//解析路径

 82     parseptr2=parseptr1;

 83     if ( '?' == *parseptr1 ) {

 84         parseptr2++;

 85         parseptr1 = parseptr2;

 86         while ( '\0' != *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("\n");

 94     }

 95     parseptr2=parseptr1;

 96     if ( '#' == *parseptr1 ) {

 97         parseptr2++;

 98         parseptr1 = parseptr2;

 99         while ( '\0' != *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("\n");//判断有无片段并解析

107         

108     }

109 }
View Code

 

你可能感兴趣的:(C语言)