HUT-1556 网址
1556: 網址
Time Limit: 1 Sec??Memory Limit: 128 MBSubmit: 16??Solved: 4
[Submit][Status][Web Board]
Description
我們平時上網總是需要輸入網址的,可是,這里有一堆的字符串,請判斷這是不是一個網址。
網址的規則如下:
1、網址由協議、域名、端口、路徑和文件構成,一個網址的實例:http://openoj.awaysoft.com:80/JudgeOnline/index.html
2、協議,以協議名+://構成,如1中的http://,這里限定使用ftp和http兩種協議,這部分可以省略。
3、域名由字母、數字、下劃線、減號以及小數點組成,小數點前后必須有數字或字母或下劃線或減號,如1中的openoj.awaysoft.com,這部分必須有。域名需要以.com、.cn、.org、.net結束。
4、端口,在域名后加:跟一個數字,如文中的:80,這部分可以省略。
5、路徑,由字母、數字、下劃線、減號、斜杠構成,斜杠前后必須有字母、數字、下劃線或者減號,如文中的/JudgeOnline/,這部分可以省略
6、文件,由字母、數字、下劃線、減號、點構成,點前后必須有字母、數字、下劃線或者減號,如文中的index.html,這部分可以省略
注意:
1、路徑必須以/開頭,如果沒有路徑,那么文件前必須有/。
2、除了協議后面的/,不得有兩個//連續。
以下是合法的網址:
http://www.baidu.com
www.baidu.com/a
www.baidu.com/a/a.a
www.baidu.com/a/
http://www.baidu.com:800/a
www.baidu.com:12
Input
第一行為N組測試數據
以下N行,每行一個字符串。
Output
輸出N行,如果是合法網址,輸出
字符串:YES
否則輸出
字符串:NO
Sample Input
2 http://openoj.awaysoft.com:80/JudgeOnline/index.html http://openoj.awaysoft..com:80/JudgeOnline/index.htmlSample Output
http://openoj.awaysoft.com:80/JudgeOnline/index.html:YES http://openoj.awaysoft..com:80/JudgeOnline/index.html:NO模擬題,不解釋了,超級惡心,沒有用正則表達式寫,代碼很長,不過效果貌似不錯,判斷時間很短。 代碼如下: #include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>bool right( char *p );bool legal( char c ){if( c=='_'|| c== '-'|| c>='a'&& c<= 'z'|| c>= '0'&& c<= '9'|| c>= 'A'&& c<= 'Z' ){return true;}else{return false;}}bool istype( char *p ){int flag= 0;for( char *i= p+ 1; *i!= '\0'; ++i ){if( legal( *i ) ){flag= 1;continue;}else{return false;}}if( flag ){return true;}else{return false; // www.baidu.com/a.}}bool iscom( char *p ) // ??oˉêy2???DDD??D?? {char cpy[10000];memset( cpy, 0, sizeof( cpy ) );strcpy( cpy, p );if( *( cpy+ 4 )!= '/'&& *( cpy+ 4 )!= ':'&& *( cpy+ 4 )!= '\0' ){return false;}*( cpy+ 4 )= '\0';if( strcmp( cpy, ".com" )!= 0&& strcmp( cpy, ".org" )!= 0&& strcmp( cpy, ".net" )!= 0 ){if( *( cpy+ 3 )!= '/'&& *( cpy+ 3 )!= ':'&& *( cpy+ 3 )!= '\0' ){return false;}*( cpy+ 3 )= '\0';if( strcmp( cpy, ".cn" )!= 0 ){return false;}else{return true;}}else{return true;}}bool isfile( char *p, char *last ){if( last&& !iscom( last ) ){return false;}int flag= 0; // ????'/'oóê?·?óD×?·? for( char *i= p+ 1; *i!= '\0'; ++i ){if( legal( *i ) ){flag= 1;continue;}else if( *i== '/' ){if( flag ){return isfile( i, NULL );}else{return false; // www.baidu.com//}}else if( *i== '.' ){if( flag ){return istype( i );}else{return false;}}else{return false;}} return true; // www.baidu.com/ }bool isport( char *p, char *last ){if( last&& !iscom( last ) ){return false;}int flag= 0;for( char *i= p+ 1; *i!= '\0'; ++i ){if( *i>= '0'&& *i<= '9' ){flag= 1;continue;}if( *i== '/' ){if( flag ){return isfile( i, NULL );}else{return false; // www.baidu.com:/a}}else{return false;}}if( flag ){return true;}else{return false;}}bool isbody( char *p, char *last ){int flag= 0;for( char *i= p+ 1; *i!= '\0'; ++i ){if( legal( *i ) ){flag= 1;continue;}else if( *i== '.' ){if( flag ){return isbody( i, p );}else{return false;}}else if( *i== ':' ){return isport( i, p );}else if( *i== '/' ){if( flag ){return isfile( i, p );}else{return false;}}else{return false;}} // ì?3??-?·?μ?÷?é?üò? .xxx ?á?2£???ê±??Dè?D??ê?·??aoó×o???éif( iscom( p ) ){return true;} else{return false;}}bool isfttp( char *url ){char cpy[10000];strcpy( cpy, url );if( *cpy== 'h' ){*( cpy+ 7 )= '\0';if( strcmp( cpy, "http://" )!= 0 ){return false;}else{return isbody( url+ 6, NULL );}}if( *cpy== 'f' ){*( cpy+ 6 )= '\0';if( strcmp( cpy, "ftp://" )!= 0 ){return false;}else{return isbody( url+ 5, NULL );}}}bool yes( char *url ){if( *url=='h'|| *url== 'f' ){return isfttp( url );}else if( legal( *url ) ){return isbody( url- 1, NULL );}else{return false;}}int main( ){char url[10000];int T;scanf( "%d", &T );while( T-- ){scanf( "%s", url );printf( yes( url )? "%s:YES\n": "%s:NO\n", url );}return 0;}
轉載于:https://www.cnblogs.com/Lyush/archive/2011/08/01/2124334.html
總結
以上是生活随笔為你收集整理的HUT-1556 网址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 拍照是开启(调用)闪光灯
- 下一篇: bzImage的概要生成过程