解题思路:
在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧^_^
如题:使用纯暴力解法先看题目要求
题目要求:
A.B.C.D是四个整数,且这四个整数存在于0到255的范围之间
四个整数不允许有前导零的存在
通过分析题目要求可以知道正确的IP地址格式是:数字.数字.数字.数字
当输入End of file时程序结束
注意事项:
没啥子注意事项吧,写代码时候小心一点就行
参考代码
由以上分析可得如下代码:
#include<stdio.h> #include<math.h> #include<string.h> struct ip{ char a[40]; }; int main() { struct ip w[40]; char end[40]="End of file";//定义结束语句 int i=0; int t; double q; char b[40]; while(gets(w[i].a)){ //当输入字符串等于结束的字符串时退出循环 if(strcmp(w[i].a,end)==0){ break; } b[i]='Y'; int n=strlen(w[i].a); w[i].a[n]='.';//令字符'.'作为标识字符,在字符串最后一位叫上字符'.' t=0; int p; int o=0; for(int j=0;j<=n;j++){ if(w[i].a[j]=='.'){ q=0; p=o; o=j-1; t++;//记录'.'的个数 //判断两个字符'.'之间是否相连,相连则退出 if(o-p<0){ b[i]='N'; break; } for(p;p<j;p++){ q=q+(w[i].a[p]-48)*pow(10.0,(o-p)); //以上面分析判断何时结束循环 if(o-p>0&&q==0){ b[i]='N'; break; } if(q>255||q<0||w[i].a[p]-48<0||w[i].a[p]-48>9){ b[i]='N'; break; } } o=o+2; } } //当不是四个点时(刚刚给最后一个字符后面加上了字符'.',一共应该是四个) if(t!=4){ b[i]='N'; } i++; } //输出'Y'和'N',注意换行 for(int j=0;j<i;j++){ printf("%c\n",b[j]); } return 0; }
写的有点小乱,希望能看懂
0.0分
18 人评分
C二级辅导-等差数列 (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:610 |
C二级辅导-计负均正 (C语言代码)浏览:556 |
C语言训练-斐波纳契数列 (C语言代码)浏览:3015 |
C二级辅导-同因查找 (C语言代码)浏览:705 |
不会做的浏览:954 |
三角形 (C++代码)记忆化搜索浏览:1317 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:699 |
K-进制数 (C语言描述,蓝桥杯)浏览:955 |