最近在学结构体,遇到这么一道题目,定义结构体数组时,不同的结构体成员数目会导致oj系统里输出不同的结果(其实按照题目的限制,只需要12就足够了,但是,如果定义s[12],会输出runtime error,s[100]时是wrong answer,而s[1000]就通过了.....)
实在不知道是哪里有问题,希望各位大佬能够帮忙看看我的代码里是否有什么问题,不甚感谢!
题目描述
考古队在一个神秘的遗迹中发现了一块石碑,经过清洗和复原他们发现上面刻有许多字符,如下: 10000101/18751212/14570326/18880808/ 由于石碑上的内容太多这里只列出了一部分。 这些神秘的字符是什么?经过一番激烈的讨论,大家一致认为这是一串神秘的日期,解开这串日期里蕴藏的秘密也许就能够预知未来。 但这个时候有个难题摆在了大家面前。这串日期是如此之长,又杂乱无章,不利于分析。这个时候他们想到了作为编程高手的你,想让你帮他们把这些日期整理下,以便于分析。
输入要求
输入一行由斜杠分隔的数字,长度不超过100,斜杠将这串数字分割成了若干部分,每个部分长度都为8。
输出要求
提取输入串中的每个日期,按时间顺序排序并输出。 输出有若干行(字符串中有几个日期就输出几行),每行一个日期,日期格式如下: 1987-08-01
输入样例
10000101/18751212/14570326/18880808/20120123/20120216
输出样例
1000-01-01 1457-03-26 1875-12-12 1888-08-08 2012-01-23 2012-02-16
以下是我的代码,用的都是字符串
#include<stdio.h>
#include<string.h>
typedef struct date//定义结构体
{
char y[5];
char m[3];
char a[3];
char z[13];
}da;
int main()
{
da d[1000];//测了好几组数据,发现d这个数组成员数不同的时候,输出的结果也不一样
da t;
char s[110];
int m,len,j,i;
char ch;
int n=0,p=0;
gets(s);
len=strlen(s);
d[p].y[4]='\0';
d[p].m[2]='\0';
d[p].a[2]='\0';
for(i=0;i<=len;i++)//逐个提取字符,放到各个日期里
{
if(n>=0&&n<=3)
{
d[p].y[n]=s[i];
}
if(n>=4&&n<=5)
{
d[p].m[n-4]=s[i];
}
if(n>=6&&n<=7)
{
d[p].a[n-6]=s[i];
}
if(n<8)
{n++;continue;}
if(n==8)
{
strcpy(d[p].z,d[p].y);
strcat(d[p].z,d[p].m);
strcat(d[p].z,d[p].a);
p++;n=0;
if(p<len/9)
{
d[p].y[4]='\0';
d[p].m[2]='\0';
d[p].a[2]='\0';
}
}
}
len=p;
for(i=0;i<len-1;i++)//排序
{
m=i;
for(j=i;j<len;j++)
{
if(strcmp(d[j].z,d[m].z)<0)
m=j;
}
t=d[m];d[m]=d[i];d[i]=t;
}
for(i=0;i<len;i++)
{
printf("%s-%s-%s\n",d[i].y,d[i].m,d[i].a);
}
return 0;}
下面是我试的几组数据,都是最后一个输入的日期会出现毛病

或许用int型解决就不会有这种情况了,但是还是想搞明白为什么看似没有影响(对我来说)的结构体数组定义会导致这样的一个结果。谢谢大佬们帮忙!!!
博主在学习结构体时遇到问题:定义不同结构体成员数的数组,导致在OJ系统中输出结果各异。代码中使用字符串处理日期,为何数组大小影响结果?寻求解答。
1152

被折叠的 条评论
为什么被折叠?



