Fotolog
Volver a la lista de problemas
Searching Quickly
123.c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int num_ignore;
char ignore[50][20];
int num_titles;
struct title {
int num_words;
char words[15][20];
} titles[200];
int num_words;
char *words[3000];
int
comp(const void *a, const void *b)
{
char *str1 = *(char **)a;
char *str2 = *(char **)b;
return strcmp(str1, str2);
}
char *
caps(char * str)
{
int i;
static char result[100];
for(i=0; i<strlen(str); i++) {
result[i] = toupper(str[i]);
}
result[i]=0;
return result;
}
void
calc(void)
{
int i,j,k,l;
for(i=0; i<num_titles; i++) {
for(j=0; j<titles[i].num_words; j++) {
int skip=0;
for(k=0; k<num_ignore; k++) {
if (!strcmp(ignore[k], titles[i].words[j])) {
skip=1;
break;
}
}
if (!skip) {
words[num_words++] = titles[i].words[j];
}
}
}
qsort(words, num_words, sizeof(char*), comp);
for(i=0; i<num_words; i++) {
if (i>0 && !strcmp(words[i], words[i-1])) {
continue;
}
for(j=0; j<num_titles; j++) {
for(k=0; k<titles[j].num_words; k++) {
if (!strcmp(words[i], titles[j].words[k])) {
for(l=0; l<titles[j].num_words; l++) {
if (l!=0) {
printf(" ");
}
if (l==k) {
printf("%s", caps(titles[j].words[l]));
} else {
printf("%s", titles[j].words[l]);
}
}
printf("\n");
}
}
}
}
}
int
main(void)
{
int i,j,k;
char str[11];
char buf[10000];
num_ignore=0;
num_titles=0;
while(fgets(buf, 10000, stdin)) {
sscanf(buf, "%s", str);
if (!strcmp(str,"::")) {
break;
}
for(i=0; i<strlen(str); i++) {
str[i] = tolower(str[i]);
}
strcpy(ignore[num_ignore++], str);
}
i=0;
while(fgets(buf, 10000, stdin)) {
titles[i].num_words = sscanf(buf,
"%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s",
titles[i].words[0], titles[i].words[1], titles[i].words[2],
titles[i].words[3], titles[i].words[4], titles[i].words[5],
titles[i].words[6], titles[i].words[7], titles[i].words[8],
titles[i].words[9], titles[i].words[10], titles[i].words[11],
titles[i].words[12], titles[i].words[13], titles[i].words[14]);
for(j=0; j<titles[i].num_words; j++) {
for(k=0; k<strlen(titles[i].words[j]); k++) {
titles[i].words[j][k] = tolower(titles[i].words[j][k]);
}
}
i++;
}
num_titles=i;
calc();
exit(0);
}









