题目描述
输入一个ip地址串,判断是否合法。
输入描述:
每行有一个IP地址,IP地址的形式为a.b.c.d,其中a、b、c、d都是整数。
输出描述:
可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。
合法的IP地址为:
a、b、c、d都是0-255的整数。
思路:
1.输入为任意字符串,可以划分出如下输入状态:
D:0~255
E:其他字符
S:.和空字符
2.状态转换如下:
输入为E则return false,输入为.或空字符则检察输入上一数字是否符合状态D。
注意实现的细节:
需要遍历到空字符,也就是比输入字符串长度多一位。
需要对"."和空字符计数,若不等于4则不合法。
#include<iostream>
using namespace std;
bool isValid(string ip)
{
int num=0;
int i=0;
int total=0;
while(i<ip.size()+1)
{
if(ip[i]>='0'&&ip[i]<='9')//判断是否为数字
{
num=num*10+ip[i]-'0';//得到数字
}
else if(ip[i]=='.'||ip[i]=='\0')
{
if(num<0||num>255)
return false;
else{
total++;
num=0;
}
}
else
{
return false;
}
i++;
}
if(total!=4)
return false;
else return true;
}
int main()
{ int n;
//cin>>n;
string ip;
while(cin>>ip)
{
if(isValid(ip))
cout<<"Yes!"<<endl;
else
cout<<"No!"<<endl;
}
}