返回信息流问题简单描述
输入多组IP数据包,输出Ip数据包总长度,Ip源地址(点分十进制),ip目的地址(点分十定制),源端口,目的端口。代码如下:
#include<stdio.h>
#include<string.h>
char str[1010];
char st[600][2];
int cToN(char ch)
{
if(ch>='a'&&ch<='z')
return (ch-'a'+10);
else
return (ch-'0');
}
int main()
{
int T,i,j,slen,k,tollength,sip1,sip2,sip3,sip4,dip1,dip2,dip3,dip4,iplen,sp,dp,q;
scanf("%d",&T);
getchar();
for(i=1;i<=T;i++)
{
gets(str);
slen=strlen(str);
k=0;
memset(st,'0',sizeof(st));
for(j=0;j<=(slen-2);j=j+3)
{
strncpy(st[k],&str[j],2);
k++;
}
for(j=0;j<k;j++)
{
for(q=0;q<2;q++)
printf("%c",st[j][q]);
printf("\n");
}
tollength=cToN(st[2][0])*16*16*16+cToN(st[2][1])*16*16+cToN(st[3][0])*16+cToN(st[3][1]);
sip1=cToN(st[12][0])*16+cToN(st[12][1]);
sip2=cToN(st[13][0])*16+cToN(st[13][1]);
sip3=cToN(st[14][0])*16+cToN(st[14][1]);
sip4=cToN(st[15][0])*16+cToN(st[15][1]);
dip1=cToN(st[16][0])*16+cToN(st[16][1]);
dip2=cToN(st[17][0])*16+cToN(st[17][1]);
dip3=cToN(st[18][0])*16+cToN(st[18][1]);
dip4=cToN(st[19][0])*16+cToN(st[19][1]);
iplen=cToN(st[0][1])*4;
sp=cToN(st[iplen][0])*16*16*16+cToN(st[iplen][1])*16*16+cToN(st[iplen+1][0])*16+cToN(st[iplen+1][1]);
dp=cToN(st[iplen+2][0])*16*16*16+cToN(st[iplen+2][1])*16*16+cToN(st[iplen+3][0])*16+cToN(st[iplen+3][1]);
printf("Case #%d:\n",i);
printf("Total length = %d bytes\n",tollength);
printf("Source = %d.%d.%d.%d\n",sip1,sip2,sip3,sip4);
printf("Destination = %d.%d.%d.%d\n",dip1,dip2,dip3,dip4);
printf("Source Port = %d\n",sp);
printf("Destination Port = %d\n",dp);
printf("\n");
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92129同步于 2017/3/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】OJ98题总是答案错误,自己真心检查不出来了,求大佬帮
gungnir0123
2017/3/7镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。