online_judge_1475
这道题目我测试了好多次都没问题,但是就是无法AC,十分愤怒。我编程习惯十分差,谁要是发现Bug。求指点!
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct SString { char e[200]; }SString; typedef struct IP { int a; int b; int c; int d; }IP; typedef struct S { int len; IP source; IP destination; int source_port; int destinstion_port; }S; int tran(char e) { if(e>='0'&&e<='9') return e-'0'; else if(e>='a'&&e<='z') return e-'a'+10; return 0; } int main() { int n,i; SString *str; S *Node; int x; while(scanf("%d",&n)!=EOF) { getchar(); str=(SString *)malloc(n*sizeof(SString)); Node=(S *)malloc(n*sizeof(S)); for(i=0;i<n;i++) gets(str[i].e); for(i=0;i<n;i++) { x=4*tran(str[i].e[1]); Node[i].len=16*256*tran(str[i].e[6])+256*tran(str[i].e[7])+\ 16*tran(str[i].e[9])+tran(str[i].e[10]); Node[i].source.a=tran(str[i].e[36])*16+tran(str[i].e[37]); Node[i].source.b=tran(str[i].e[39])*16+tran(str[i].e[40]); Node[i].source.c=tran(str[i].e[42])*16+tran(str[i].e[43]); Node[i].source.d=tran(str[i].e[45])*16+tran(str[i].e[46]); Node[i].destination.a=tran(str[i].e[48])*16+tran(str[i].e[49]); Node[i].destination.b=tran(str[i].e[51])*16+tran(str[i].e[52]); Node[i].destination.c=tran(str[i].e[54])*16+tran(str[i].e[55]); Node[i].destination.d=tran(str[i].e[57])*16+tran(str[i].e[58]); Node[i].source_port=4096*tran(str[i].e[3*x])+256*tran(str[i].e[3*x+1])+\ 16*tran(str[i].e[3*x+3])+tran(str[i].e[3*x+4]); Node[i].destinstion_port=4096*tran(str[i].e[3*x+6])+256*tran(str[i].e[3*x+7])+\ 16*tran(str[i].e[3*x+9])+tran(str[i].e[3*x+10]); } for(i=0;i<n;i++) { printf("Case #%d\n",i+1); printf("Total length = %d bytes\n",Node[i].len); printf("Source = %d.%d.%d.%d\n",Node[i].source.a,\ Node[i].source.b,Node[i].source.c,Node[i].source.d); printf("Destination = %d.%d.%d.%d\n",Node[i].destination.a,\ Node[i].destination.b,Node[i].destination.c,Node[i].destination.d); printf("Source Port = %d\n",Node[i].source_port); printf("Destination Port = %d\n\n",Node[i].destinstion_port); } free(str); free(Node); } return 0; }