思路: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语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:907 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:528 |
A+B for Input-Output Practice (C语言代码)浏览:468 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:1072 |
1118(求助_已解决)浏览:329 |
Tom数 (C语言代码)浏览:495 |
程序员的表白 (C语言代码)浏览:598 |
判定字符位置 (C语言代码)浏览:799 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:643 |
班级人数 (C语言代码)浏览:927 |