文章

2

粉丝

489

获赞

2

访问

21.7k

头像
1023-IP地址题,求大佬解救,我找不到自己错,钻牛角尖了,答案通过60.
P1023 贵州大学机试题
发布于2019年12月10日 22:04
阅读数 10.3k

#include<stdio.h>
void main()
{char s[100];
int i=0,t=0,c=0,x[10],b=0;
gets(s);
while(s[i]!='\0')
    {if(s[i]!='.'&&s[i]<'0'||s[i]>'9') break;
     else if(s[i]=='.') c++;
    i++;}
  if(s[i]=='\0'&&c==3&&s[i-1]!='.'&&s[0]!='.')
    {i=0;
   while(s[i]!='\0')
    {if(s[i]=='.') if(t>255) {printf("Error");break;}
     else {i++;t=0;}
   t=t*10+s[i]-'0';
    i++;}
if(s[i]=='\0') if(t>255) printf("Error");
else {i=0;t=0;
      while(s[i]!='\0')
     {if(s[i]=='.') {x[b]=t;b++;i++;t=0;}
      t=t*10+s[i]-'0';
      i++;}
     printf("0x%02X%02X%02X%02X",x[0],x[1],x[2],t);
    &nbs...

登录查看完整内容


登录后发布评论

7 条评论
draw
2019年12月11日 23:59

#include<stdio.h>
void main()
{char s[15];
int i=0,t=0,b=0,x[3];
gets(s);
while(s[i]!='\0')
    {if(s[i]!='.'&&s[i]<'0'||s[i]>'9') break;
     if(s[i]=='.'&&s[i-1]!='.'&&s[i+1]!='.') b++;//‘.’的位置确定为固定的排法
     i++;}
  if(s[i]=='\0'&&b==3&&s[i-1]!='.'&&s[0]!='.')//排除数字和‘.’之外的字符>以及‘.’的位置。
    {i=0;
     while(s[i]!='\0')
    {if(s[i]=='.') {if(t>255) {printf("Error");break;}//将字符串里的四组数字提出与255比较;
                    else {i++;t=0;}}
      t=t*10+s[i]-'0';
      i++;}
    if(t>255) printf("Error");
    else {i=t=b=0;
       while(s[i]!='\0')
     {if(s[i]=='.') {x[b]=t;b++;i++;t=0;}
      t=t*10+s[i]-'0';
      i++;}
     printf("0x%02X%02X%02X%02X",x[0],x[1],x[2],t);
     }
   }
else printf("Error");
}
 

赞(0)

admin : 回复 draw: 这个题数据有点强,因为可能没有点,也可能点的数量不对。 这个题差不多、简单一点、因为格式已经固定了、http://www.noobdream.com/DreamJudge/Issue/page/1395/

2019年12月12日 12:37
admin SVIP
2019年12月11日 20:13

数据不一定是纯数字

赞(1)

draw : 回复 admin: #include<stdio.h> void main() {char s[15]; int i=0,t=0,b=0,x[3]; gets(s); while(s[i]!='\0') {if(s[i]!='.'&&s[i]<'0'||s[i]>'9') break; if(s[i]=='.'&&s[i-1]!='.'&&s[i+1]!='.') b++;//‘.’的位置确定为固定的排法 i++;} if(s[i]=='\0'&&b==3&&s[i-1]!='.'&&s[0]!='.')//排除数字和‘.’之外的字符>以及‘.’的位置。 {i=0; while(s[i]!='\0') {if(s[i]=='.') {if(t>255) {printf("Error");break;}//将字符串里的四组数字提出与255比较; else {i++;t=0;}} t=t*10+s[i]-'0'; i++;} if(t>255) printf("Error"); else {i=t=b=0; while(s[i]!='\0') {if(s[i]=='.') {x[b]=t;b++;i++;t=0;} t=t*10+s[i]-'0'; i++;} printf("0x%02X%02X%02X%02X",x[0],x[1],x[2],t); } } else printf("Error"); } //我里边包含了这种情况,不晓得全面不,我自己是局内人找不出来,求!

2019年12月11日 23:58

谦虚使人进步 : 回复 admin: 我是scanf("%d.%d.%d.%d");这样好像不行,不知道是哪里的原因

2020年1月20日 11:54

谦虚使人进步 : 回复 admin: 我是scanf("%d.%d.%d.%d");这样好像不行,不知道是哪里的原因

2020年1月20日 11:54

admin : 回复 admin: 因为输入数据可能没有四个点,输入数据没有说一定是这样的格式,不能先入为主。

2020年1月20日 16:33