/* * @(#) msu98_d.c - Problem 'D' ("String formatting") solution * of the ACM Programming Contest at the MSU in 1998. * (c) 1998 Ivan Maidanski http://ivmai.chat.ru * Freeware program source. All rights reserved. ** * Language: ANSI C * Tested with: Borland C++ v3.1 * Last modified: 1998-09-29 22:55:00 GMT+04:00 */ /* Input data file: d.dat */ #include /* FILE, EOF, fopen(), getc(), fscanf(), printf() */ int delim[256]; char fmt[256],s[256]; int main() { int cnt,cur,n,i,j,k,c,cc; FILE *f=fopen("d.dat","rt"); fscanf(f,"%*[^0-9]%d",&cnt); for (cur=1;cur<=cnt;cur++) { printf("+++++ %d\n",cur); fscanf(f,"%*[^0-9]%d%*[^[]%*c",&n); for (i=0;i<256;i++) delim[i]=0; cc=0; while ((c=getc(f))!=EOF && c!=']') { if (c=='-') for (c=getc(f);++cc'9');i++); if (!fmt[i]) break; for (k=0;fmt[i] && fmt[i]>='0' && fmt[i]<='9';i++) k=10*k+fmt[i]-'0'; if (!fmt[i]) break; if (k) { j=0; if (--k) while (s[j]) if (delim[s[j++]] && !--k) break; if (!k) for (;s[j] && !delim[s[j]];j++) printf("%c",s[j]); } else printf("%s",s); } if (!fmt[i]) break; } printf("\n"); } } return 0; }