1556: 网址

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 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.html

Sample 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 )  // žÃº¯Êý²»œøÐÐÐøÅжš {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; // ŒÇÂŒ'/'ºóÊÇ·ñÓÐ×Ö·û 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;}} // Ìø³öÑ­»·ËµÃ÷¿ÉÄÜÒÔ .xxx œá⣬ŽËʱֻÐèÅжšÊÇ·ñΪºó׺ŒŽ¿É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 网址相关推荐

  1. 网络上游戏制作相关学习站点的网址

    棋牌类游戏客户端结构分析 编辑 2008-04-18 09:57:00 标签:游戏大厅 结构 it 在这里所讨论的棋牌类游戏并不是所有的平台类型,而是通常的表现形式即游戏广场-游戏大厅-游戏房间的类型 ...

  2. 关于科研技术的一些常用网址

    springerlink密码 http://www.springerlink.com/(kmr ... sp?referrer=default user name: und755bq password ...

  3. api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解

    本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法.分享给大家供大家参考,具体如下: 新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. A ...

  4. AVR开发 Arduino方法(附四) 参考文献与网址

    1. 参考文献 [1] Arduino 魔法书:实现梦想的工具和技术. Jeremy Blum, 电子工业出版社, 2014 [2] Arduino高级开发权威指南. Steven F.Barrett ...

  5. 360浏览器如何设置为像chrome谷歌浏览器那样输入网址回车在当前页面,而不是新建一个标签打开

    打开360浏览器→菜单→设置→右上角输入"新标签"搜索如下图: 然后去掉"在新标签打开地址栏输入的网址"前面的☑

  6. Apache URL重定向避免网址结尾斜线问题

    结尾斜线问题 描述: 每个网主都曾受到结尾斜线问题的折磨,若在URL中没有结尾斜线,服务器就会认为URL无效并返回错误,因为服务器会根据/~quux/foo去寻找foo这个档案,而非显示这个目录.其实 ...

  7. Microsoft Platform SDK Febrary 2003更新vc6的SDK网址

    Microsoft Platform SDK Febrary 2003更新vc6的SDK网址,目前找到3处,分别为: 1.http://www.x86pro.com/plus/view.php?aid ...

  8. 2345浏览器网址_2345网址导航回应“浏览器主页劫持”丨开发者日报

    1.2345网址导航回应"浏览器主页劫持" "浏览器主页被2345劫持怎么解决?""如何解决浏览器被2345主页劫持的问题?"--在网民吐槽 ...

  9. 2021梧州一中高考成绩查询,2021年广西高考成绩查询网站查分网址:https://www.gxeea.cn/...

    [摘要]高考结束后大家最为关心的问题就是在哪里查分,如何查分,高考频道特别整理2021年广西高考成绩查询查分网址,成绩公布时考生可直接点击网址进行查分,预祝大家都能顺利的考上理想的大学! 由于,各省级 ...

最新文章

  1. tensorflow2.x版本无法调用gpu的一种解决方法
  2. php如何打出的正方形行列,javascript实现输出指定行数正方形图案的方法
  3. MyEclipse 2017 CI 9 发布(附下载)
  4. Bootstrap3 弹出提示插件的选项
  5. java byte(字节_Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutpu......
  6. cout不明确什么意思_王源吸烟粉丝说不袒护,让他谨慎交友是什么意思?
  7. 半解TextBox灵异事件背后神秘的深度灵异事件
  8. 蓝桥杯ALGO-125算法训练 王、后传说(回溯、递归)
  9. python中文模糊关键词提取_用Python给你的文本提取关键词
  10. 2018计算机核心期刊,2018中国科技核心期刊目录!!!!
  11. linux操作系统入门教学
  12. win7计算机如何设置密码,电脑win7怎么设置开机密码
  13. Ackerman函数 非递归 java_ackerman(ackerman是谁)
  14. excel表格拆分如何快速完成
  15. 异步下载小说《诡秘之主》
  16. mysql 五舍六入_四舍六入五成双(适用于MYSQL)(最大支持小数点第9位)
  17. Deep Retinex Decomposition for Low-Light Enhancement 论文阅读笔记
  18. Spring Cloud Gateway源码系列之路由配置加载过程
  19. 语音识别类产品的分类及应用场景
  20. 多多情报通:拼多多48小时发货怎么设置?最晚多久发货?

热门文章

  1. hiveql笔记(一)
  2. Linux下源码安装CodeBlocks
  3. Oracle 多行记录合并/连接/聚合字符串的几种方法
  4. 中国社交产品十年记...
  5. PMCAFF|百度客户端产品:高效开发客户端产品的正确姿势
  6. 中国经验对印度等金砖国家智慧城市建设的启示
  7. Android探索之旅 | 为应用添加角标(Badge)
  8. LeetCode - Reverse Nodes in k-Group
  9. buildin 字节交换
  10. 一句SQL随机查询ACCESS中的几条记录