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 ( '