原题链接:IP判断
看了别人的方法后觉得自己的方法好愚笨,但花了我不少时间,说一下我的思路。
我是通过拆分录入的字符串再去判断的,用strchr这个函数去查找‘.’,然后获取‘.’前面的字符,再进行判断,判断结束后把剩下的字符串再赋值给str,可优化的地方有好多,然后最后一次再判断最后那一段的字符串。
这个方法可以去B站看浙江大学翁凯老师的C语言课,讲strchr的那一段,用的就是那个方法。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i,j,sn,flag=0,a[4];
int sum=0;
char str[31],ch;
char * p;
// while(scanf("%d.%d.%d.%d",&a[0],&a[1],&a[2],&a[3]))
while((scanf("%s", &str))!=EOF){
for(j=0;j<3;j++){
p=strchr(str,'.');
char c=*p;
*p='\0';
char * t=(char*)malloc(strlen(str)+1);
strcpy(t,str);
// printf("%s\n",t);
if(*t=='0'){
flag=1;
break;
}
for(i=0,sum=0;i<strlen(t);i++){
ch=*(t+i);
if(!((ch>='0')&&(ch<='9'))){
flag=1;
break;
}
sum+=(ch-48)*pow(10,strlen(t)-i-1);
}
// printf("%d\n",sum);
if(flag==1){
break;
}
if(!(sum>=0&&sum<=255)){
flag=1;
break;
}
*p=c;
// printf("%s\n",p);
// printf("%s",p+1);
p=p+1;
// printf("%d\n",strlen(p));
for(i=0;i<strlen(p);i++){
str[i]=*(p+i);
}
str[strlen(p)]='\0';
free(t);
}
// printf("\n%s\n",str);
// printf("%d",strlen(str));
if(flag==0){
for(j=0,sum=0;j<strlen(str);j++){
ch=str[j];
if(!((ch>='0')&&(ch<='9'))){
flag=1;
break;
}
sum+=(ch-48)*pow(10,strlen(str)-j-1);
}
if(!(sum>=0&&sum<=255)){
flag=1;
}
// printf("%d\n",sum);
}
if(flag==1){
printf("N\n");
}else{
printf("Y\n");
}
flag=0;
// printf("%s",str);
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复