2015浙工大校赛-Problem D: IpOrUrl(字符串处理)

题目链接:http://acm.zjut.edu.cn/onlinejudge/problem.php?cid=1101&pid=3

题面:

Problem D: IpOrUrl

Time Limit: 1 Sec   Memory Limit: 32 MB
Submit: 410   Solved: 43
[ Submit][ Status][ Web Board]

Description

域名?IP?
给出一个包含数字,字母,点的序列,询问是一个ip还是一个域名

Input

每行一个字符串

Output

每行输出一行,Ip Or Url

Sample Input

192.168.0.1
www.baidu.com
127.0.0.1
localhost

Sample Output

Ip
Not
Ip
Not



解答:

题目描述有一点点问题,求的是给定的字符串,是不是IP,是的话输出Ip,不是的话输出Not。

坑还是有点多的:
1.输入的格式不一定规范,比如0.1.2.3.4, .1.2.2(被这个坑死了,囧)

2.IP值要在0~255

3.0000000.0000000.0000000.000000这组神坑,不过没加上,应该输出Ip。

做法:

1.首先判断是不是只有数字和'.'。
2.点的个数对不对。
3.然后根据点的位置,拆分看是不是符合要求。
4.拆分出来的,还要判断是不是空的,以免错误。


代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
int toString (string s)
{
	int res=0;
	int t=1;
	for(int i=s.length()-1;i>=0;i--)
	{
		res+=(s[i]-'0')*t;
		t*=10;
	}
	return res;
}
int main()
{
	string s,tmp;
	while(cin>>s)
	{
		bool flag=true;
		int cnt=0,tmpnum;
		for(int i=0;i<s.length();i++)
		{
			if((s[i]>='0'&&s[i]<='9'))continue;
			else if(s[i]=='.')
			{
				cnt++;
			}
			else
			{
				flag=false;
				break;
			}
		}
		if(cnt!=3)flag=false;
		if(flag)
		{
			vector <string> store;
			tmp="";
			s+='.';
			for(int i=0;i<s.length();i++)
			{
				if(s[i]=='.')
				{
					store.push_back(tmp);
					tmp="";
				}
				else
				{
					tmp+=s[i];
				}
			}
			for(int i=0;i<store.size();i++)
			{
				if(store[i].length()==0)flag=false;
				tmpnum=toString(store[i]);
				if(tmpnum<0||tmpnum>255)
					flag=false;
			}
		}
		if(flag)cout<<"Ip\n";
		else cout<<"Not\n";
	}
}


你可能感兴趣的:(入门,简单题,模拟题,神坑题)