思路:A.B.C.D将IP通过IP点的位置将ip分为四个部分,分别对每一部分进行检测
检测时注意如果检测的这一部分中有字母后者‘’-‘’号,直接判断出错,后面的不用检测
如果检测的这一部分的每一个字符都是‘’0‘’-‘’9‘’,那么再通过计算这一部分的和
例如‘’123‘’字符串是‘’1‘’-‘’0‘’转数字再乘10的此方来模拟个,十,百位。最后判断结果是否在【0,255】之间。
对每一部分进行判断即可
#include<iostream>
#include<string.h>
using namespace std;
//将点的位置设为1
//得到点的位置
int GetPoint(char *str,int flag[],int length)
{
for(int i=0;i<length;i++)
{
if(str[i]=='.'&&!flag[i])
{
flag[i]=1;
return i;
}
}
}
int main()
{
char str[30];
while(cin.getline(str,30))
{
int flag[30]={0};
int point[4]; //存储点的位置
for(int k=0;k<3;k++)
{
point[k]=GetPoint(str,flag,strlen(str));
}
point[3]=strlen(str);//虚拟最后一个点是在字符串尾
int k,j;
for( k=0,j=0;k<4;k++)
{
bool numflag=true;
double sum[30]={0};
int i;
for( i=j;i<point[k];i++)
{
if(str[i]>='0'&&str[i]<='9')
{
sum[i]=str[i]-'0';
//字符转数字存sum
continue;
}
else
{
numflag=false;
break;//如果字符是0-9则继续循环,否则直接跳出循环判断出错
}
}
if(!numflag) break;//直接跳出大循环判断出错
else
{
int add=0;
for(int n=i-1,t=1;n>=j;n--)
{
add+=sum[n]*t;
t=t*10;
}
//cout<<add<<endl;
if(add>255)
break;
else
j=point[k]+1;//将j设为上一个标记的起点,继续大循环
}
}
if(k==4) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复