题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2206

Problem Description
在网络课程上,我学到了非常多有关IP的知识。

IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,如今IPV4下用一个32位无符号整数来表示,一般用点分方式来显示。点将IP地址分成4个部分。每一个部分为8位。表示成一个无符号整数(因此不须要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址。一个IP地址串中没有空格出现(由于要表示成一个32数字)。

可是粗心的我。经常将IP地址写错,如今须要你用程序来推断。

 
Input
输入有多个case,每一个case有一行。不超过100个字符。
 
Output
对于每一个case,推断输入的IP是否正确。假设正确输入YES,否则NO。
 
Sample Input
192.168.100.16
 
Sample Output
YES

IP地址应该满足例如以下条件:

1.  '.'有且仅仅能有3个

2.  4个放数字的位置,长度应该在1~3之间(含边界)

3.  每一个数字应该:1~255(含边界)

4.  不能有特殊字符

比較坑的地方就是。输入居然会有空格!

用scanf就不行了。

代码例如以下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char s[117];
int flag;
int len;
int place[17];
int k;
void judge1(char st[])//推断是否每一个数字段的个数在1——3之间。 {
if(len > 15 || len < 7)
flag = 1;
}
void judge2(char st[])//推断是否有且仅有三个'.'。
{
int cont = 0;
int i;
for(i = 0; i < len; i++)
{
if(st[i] == '.')
{
cont++;
place[k] = i;
k++;
}
}
if(cont != 3)
flag = 1;
place[k] = i;
k++;
}
void judge3(char st[])//推断是否有特殊字符。
{
for(int i = 0; i < len; i++)
{
if(!(st[i]=='.' || (st[i]>='0'&&st[i]<='9')))
{
flag = 1;
break;
}
}
}
void judge4(char st[])//推断是否每一个数字段的大小在1——255之间(含边界)。
{
for(int i = 1; i < k; i++)
{
int tt = 0;
for(int j = place[i-1]+1; j < place[i]; j++)
{
tt = tt*10+(st[j]-'0');
}
if(tt > 255)
{
flag=1;
break;
}
}
}
int main()
{
while(gets(s))
{
//换为scanf直接WA
memset(place,0,sizeof(place));
place[0] = -1;
flag = 0;
k = 1;
len = strlen(s);
judge1(s);
if(flag)
{
printf("NO\n");
continue;
}
judge2(s);
if(flag)
{
printf("NO\n");
continue;
}
judge3(s);
if(flag)
{
printf("NO\n");
continue;
}
judge4(s);
if(flag)
{
printf("NO\n");
continue;
}
printf("YES\n");
}
return 0;
}

HDU 2206 IP的计算(字符串处理)的更多相关文章

  1. hdu 2206 IP的计算(最全的注意事项)

    注意: 1.非法字符(包括空格) 如下都是错的 A.145.124.4 192.168.18 123(用scanf输入的话,则接收的是:192.168.18) 2.'.'有且仅有3个,且不能连续出现, ...

  2. HDOJ 2206 IP的计算(正则表达式的应用)

    Problem Description 在网络课程上,我学到了很多有关IP的知识.IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方 ...

  3. 【HDOJ】2206 IP的计算

    题目很简单,情况有很多种. #include <stdio.h> #include <string.h> ]; int isIPaddr(char buf[]) { int i ...

  4. HDU 2206

    Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...

  5. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用

    NET MVC全局异常处理(一)   目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...

  6. HDU 1358 Period(KMP计算周期)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358 题目大意:给你一串字符串,判断字符串的前缀是否由某些字符串多次重复而构成. 也就是,从第1个字母 ...

  7. iOS中计算字符串NSString的高度

    根据固定宽度计算字符串高度: NSString *info = @"但是公司的高度是广东省公司的广东省高速度来开个大帅哥多撒谎个爱好就跟他说噶三公司噶是的刚好是我哥如果黑暗如果坏都干撒降低公 ...

  8. php计算字符串长度

    /** * 计算字符串的长度(非字节) * 先用正则将字符串分解为个体单元,然后再计算单元的个数即得出字符串的长度 * from wordpress * @param string $string * ...

  9. [转载] python 计算字符串长度

    本文转载自: http://www.sharejs.com/codes/python/4843 python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函 ...

随机推荐

  1. 怎么在windows上安装 ansible How to install ansible to my python at Windows

    答案是不能再window上安装,答案如下: It's back! Take the 2018 Developer Survey today » Join Stack Overflow to learn ...

  2. java定时器和实时查询数据库

    定时器: Timer timer = new Timer();                    timer.schedule(new TimerTask() {                  ...

  3. 最容易理解的CSS的position教程——十步图解CSS的position

    CSS的positon,我想做为一个Web制作者来说都有碰到过,但至于对其是否真正的了解呢?那我就不也说了,至少我自己并不非常的了解其内核的运行.今天在Learn CSS Positioning in ...

  4. Windows10开启热点

    1.以网线的连接方式,已经连接. 2.打开CMD 3. 开启热点 3.1设置热点名称和密码 netsh wlan set hostednetwork mode=allow ssid=name key= ...

  5. CSS——font

    行高的量取方式: 1.第一行可设置margin-top值.然后将第一文字顶部到第二行文字顶部的值作为行高的值(要注意对齐方式) 2.将 3.电视上 font:12px/1.5//字体12px,行高1. ...

  6. (转) Arcgis for js之WKT和GEOMETRY的相互转换

    http://blog.csdn.net/gisshixisheng/article/details/44057453 1.wkt简介 WKT(Well-known text)是一种文本标记语言,用于 ...

  7. windows环境搭建ui自动化环境

    windows环境安装python虚拟环境 https://www.cnblogs.com/suke99/p/5355894.html https://www.cnblogs.com/jiuyang/ ...

  8. windows设置右键菜单

    1. 打开注册表,(win + R,输入regedit) 2. 在 HKEY_CLASSES_ROOT\Directory\Background\shell 中,新建项:如(cmder),在 cmde ...

  9. opencv 图像各方向旋转

    1. 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移.旋转.缩放.剪切这几种.本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换 ...

  10. P2884 [USACO07MAR]每月的费用Monthly Expense

    题目描述 Farmer John is an astounding accounting wizard and has realized he might run out of money to ru ...