原题链接:IP判断
解题思路:
先以'.'号为间隔符进行分段。再一次对每段判断是否为数字,如果是数字则进行转换,否则打印N;最后进行数字的大小判断,观察其是否在[0, 255]的范围内。
注意事项:
注意判断时所读取的数组长度。
参考代码:
//1116: IP地址判断
#include <stdio.h>
#include <string.h>
char a[4], b[4], c[4], d[4], ip[30];
int i=0;
// aflag标志数,1为数,0为非数;
// alen分段数;
// anum转换后的数字;
int aflag, bflag, cflag, dflag;
int alen, blen, clen, dlen;
int anum, bnum, cnum, dnum;
int main()
{
while(scanf("%s", ip) != EOF)
{
// 对标志符、分段数、转换后的数字进行初始化
aflag=1, bflag=1, cflag=1, dflag=1;
anum=0, bnum=0, cnum=0, dnum=0;
alen=0, blen=0, clen=0, dlen=0;
i = 0;
if(strlen(ip) > 16)
{
printf("N\n");
continue;
}
// 将原字符串分为四段
while(ip[i] != '.')
{
a[alen] = ip[i];
alen++;
i++;
}
// 第一段结束
i++;
while(ip[i] != '.')
{
b[blen] = ip[i];
blen++;
i++;
}
// 第二段结束
i++;
while(ip[i] != '.')
{
c[clen] = ip[i];
clen++;
i++;
}
// 第三段结束
i++;
while(i < strlen(ip))
{
d[dlen] = ip[i];
dlen++;
i++;
}
// 第四段结束
// 判断每个字符是否是数字,是则转换为int类型,否则将标志数置0;
// 注意:从数组中取出的数字为ascii码,需要减去 49;
// 在第一次使用a[]之后,如果a[]中所有的元素已经被使用过一次,而之后的较短的IP地址进入后,有一部分没有完全覆盖,会出错。
// 这时进行数字转换判断时,应该以分段时的长度为准,而不是已数组a[]的长度。
for(i=0; i<alen; i++)
{
if( a[i] <'0' || a[i] >'9' )
{
aflag = 0;
break;
}
else
{
anum = anum*10 + (a[i]-48);
}
}
for(i=0; i<blen; i++)
{
if( b[i] <'0' || b[i] >'9' )
{
bflag = 0;
break;
}
else
{
bnum = bnum*10 + (b[i]-48);
}
}
for(i=0; i<clen; i++)
{
if( c[i] <'0' || c[i] >'9' )
{
cflag = 0;
break;
}
else
{
cnum = cnum*10 + (c[i]-48);
}
}
for(i=0; i<dlen; i++)
{
if( d[i] <'0' || d[i] >'9' )
{
dflag = 0;
break;
}
else
{
dnum = dnum*10 + (d[i]-48);
}
}
if( aflag == 0 || bflag == 0 || cflag == 0 || dflag == 0)
{
printf("N\n");
continue;
}
// 判断是否在[0, 255]的范围内
if( anum < 0 || anum > 255 )
{
printf("N\n");
continue;
}
else if( bnum < 0 || bnum > 255 )
{
printf("N\n");
continue;
}
else if( cnum < 0 || cnum > 255 )
{
printf("N\n");
continue;
}
else if( dnum < 0 || dnum > 255 )
{
printf("N\n");
continue;
}
else
{
printf("Y\n");
}
}
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复