|
¡¡¤³¤ó¤Ê´¶¤¸¤Ç¤É¤¦¤Ç¤·¤ç¤¦¡©
¡¡ÆþÎϥǡ¼¥¿¤ÏÀµ¤·¤¤¤â¤Î¤È²¾Äꤷ¤Æ¤¤¤Þ¤¹¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ïfgets¤Î
Á°¸å¤Ç¤½¤ì¤Ê¤ê¤Î½èÍý¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡»ä¤â»Å»ö¤Ç»÷¤¿¤è¤¦¤Ê¤Î¤òÁȤó¤À¤³¤È¤¬¤¢¤ê¤Þ¤¹¡ÊCOBOL¤Ç¤Ç¤¹¤¬¡Ë¡£
¤½¤Î¤È¤¤Î¤Ï¤³¤³¤Ç¤¤¤¦¤Ê¤éaaa¤¬°ìÃס¢aaa¡¦bbb¤¬°ìÃס¢aaa¡Áccc¤¬°ìÃס¢
aaa¡Áddd¤¬°ìÃפΣ´Ãʳ¬¤Î½¸·×·ë²Ì¤ò½ñ¤½Ð¤¹¤è¤¦¤Ê¤â¤Î¤Ç¡¢¤³¤ì¤è¤ê¤â
¤µ¤é¤ËÌÌÅݤǤ·¤¿¡£
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* ¥½¡¼¥È¥ï¡¼¥¯¹½Â¤ÂÎ */
#define AAA_LEN (10)
#define BBB_LEN (10)
#define CCC_LEN (3)
#define DDD_LEN (16)
#define EEE_LEN (15)
#define RECORD_LEN (AAA_LEN+BBB_LEN+CCC_LEN+DDD_LEN+EEE_LEN)
typedef struct _sortwork
{
char aaa[AAA_LEN+1];
char bbb[BBB_LEN+1];
char ccc[CCC_LEN+1];
char ddd[DDD_LEN+1];
char eee[EEE_LEN+1];
} sortwork_t;
/* ¥×¥í¥È¥¿¥¤¥×Àë¸À */
void summarize(FILE* fi, FILE* fo);
void sortwork_fill(sortwork_t* wk, char* buf);
int sortwork_compare(sortwork_t* lhs, sortwork_t* rhs);
void write_result(FILE* fo, sortwork_t* prev, int sum);
/* main */
int main()
{
FILE* fi;
FILE* fo;
fi = fopen("input.txt", "r");
fo = fopen("output.txt", "w");
summarize(fi, fo);
fclose(fi);
fclose(fo);
return 0;
}
/* fi¥Õ¥¡¥¤¥ë¤ò½¸·×¤·¤Æfo¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ¹¤ë */
void summarize(FILE* fi, FILE* fo)
{
sortwork_t curr = {0}; /* ¸½ºß¥Ç¡¼¥¿ */
sortwork_t prev = {0}; /* Á°²ó¥Ç¡¼¥¿¡Ê½¸·×¥¡¼Èæ³ÓÍÑ¡Ë */
int sum = 0; /* ½¸·×ÃÍ */
char buf[RECORD_LEN+2+1]; /* ÆÉ¹þ¥Ð¥Ã¥Õ¥¡ */
/* ½é²óÆÉ¹þ */
if ( !fgets(buf, RECORD_LEN+2+1, fi) )
{
return;
}
/* ÆÉ¤ß¹þ¤ó¤ÀÃͤòcurr¤Ë³ÊǼ */
sortwork_fill(&curr, buf);
/* ½¸·×¥¡¼Èæ³ÓÍѤ˸½ºß¥Ç¡¼¥¿¤òÁ°²ó¥Ç¡¼¥¿¤ËÂàÈò */
prev = curr;
/* ½¸·×Ãͤνé´ü²½ */
sum = atoi(curr.eee);
/* ¥½¡¼¥È´Ø¿ô¤¬ÆÉ¤ß¹þ¤á¤Ê¤¯¤Ê¤ë¤Þ¤Ç */
while ( fgets(buf, RECORD_LEN+2+1, fi) )
{
/* ÆÉ¤ß¹þ¤ó¤ÀÃͤòcurr¤Ë³ÊǼ */
sortwork_fill(&curr, buf);
/* ½¸·×¥¡¼¤òÈæ³Ó */
if ( sortwork_compare(&prev, &curr) == 0 )
{
/* ½¸·×¥¡¼¤¬Æ±¤¸¾ì¹ç */
/* eee¤ò½¸·×Ãͤ˲û»¤¹¤ë */
sum += atoi(curr.eee);
}
else
{
/* ½¸·×¥¡¼¤¬Âå¤ï¤Ã¤¿¾ì¹ç */
/* ¸½ºß¤Î½¸·×·ë²Ì¤òfo¤Ë½ÐÎϤ¹¤ë */
write_result(fo, &prev, sum);
/* ¸½ºß¥Ç¡¼¥¿¤òÁ°²ó¥Ç¡¼¥¿¤ËÂàÈò */
prev = curr;
/* ½¸·×Ãͤνé´ü²½ */
sum = atoi(curr.eee);
}
}
/* ºÇ¸å¤Î·ë²Ì¤òfo¤Ë½ÐÎϤ¹¤ë */
write_result(fo, &prev, sum);
}
/* ÆÉ¤ß¹þ¤ó¤ÀÃͤò¥½¡¼¥È¥ï¡¼¥¯¤Ë³ÊǼ¤¹¤ë */
void sortwork_fill(sortwork_t* wk, char* buf)
{
strncpy(wk->aaa, buf, AAA_LEN); buf += AAA_LEN;
strncpy(wk->bbb, buf, BBB_LEN); buf += BBB_LEN;
strncpy(wk->ccc, buf, CCC_LEN); buf += CCC_LEN;
strncpy(wk->ddd, buf, DDD_LEN); buf += DDD_LEN;
strncpy(wk->eee, buf, EEE_LEN);
}
/* ¥½¡¼¥È¥ï¡¼¥¯Æ±»Î¤òÈæ³Ó¤¹¤ë */
int sortwork_compare(sortwork_t* lhs, sortwork_t* rhs)
{
return !((strcmp(lhs->aaa, rhs->aaa) == 0 ) &&
(strcmp(lhs->bbb, rhs->bbb) == 0 ) &&
(strcmp(lhs->ccc, rhs->ccc) == 0 ) &&
(strcmp(lhs->ddd, rhs->ddd) == 0 ));
}
/* ½¸·×·ë²Ì¤ò¥Õ¥¡¥¤¥ë¤Ø½ÐÎϤ¹¤ë */
void write_result(FILE* fo, sortwork_t* prev, int sum)
{
int i;
char sumBuf[EEE_LEN+1] = { 0 };
fputs(prev->aaa, fo);
fputs(prev->bbb, fo);
fputs(prev->ccc, fo);
fputs(prev->ddd, fo);
itoa(sum, sumBuf, 10);
/* sumBuf¤ÎËöÈø¤ò¶õÇòËä¤á¤¹¤ë */
for ( i = 0; i < EEE_LEN; ++i )
{
if ( !sumBuf[i] ) sumBuf[i] = ' ';
}
fputs(sumBuf, fo);
fputs("\n", fo);
}
|