看了别人的方法后觉得自己的方法好愚笨,但花了我不少时间,说一下我的思路。
我是通过拆分录入的字符串再去判断的,用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语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1067 |
C语言程序设计教程(第三版)课后习题8.3 (Java代码)浏览:1402 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:949 |
成绩转换 (C语言代码)浏览:1048 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
字符逆序 (C语言代码)浏览:706 |
1642题解浏览:784 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题12.5 (C语言代码)浏览:799 |
拆分位数 (C语言代码)浏览:558 |