思路: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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

UDP广播协议叫吃饭 6年前 回复TA
大佬看看我这个http://www.dotcpp.com/blog/56370.html,感觉更简单