-
-
Save anonymous/9f6c87fb33985606a297 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define WORDLIM 128 | |
#define REPEAT for(;;) | |
struct word { | |
char *cont; | |
char *wsp; | |
int ctr; | |
}; | |
char peekchar(void) | |
{ | |
char c; | |
c = getchar(); | |
if(c != EOF) ungetc(c, stdin); /* puts it back */ | |
return c; | |
} | |
struct word *getword(){ | |
char cont[WORDLIM]; | |
char wsp[WORDLIM]; | |
cont[0] = '\0'; | |
wsp[0] = '\0'; | |
if (peekchar() == EOF) {return NULL;} | |
REPEAT{ | |
char c = getchar(); | |
char buf[2]; | |
buf[0]=c; | |
buf[1]='\0'; | |
if (c == '\n' || c == ' ' || c == EOF){ | |
if (c != EOF) | |
strcat(wsp, buf); | |
if (peekchar() != '\n' && peekchar() != ' '){ | |
struct word *toret; | |
toret = malloc(sizeof(struct word)); | |
toret->cont = malloc(strlen(cont) + 1); | |
strcpy(toret->cont, cont); | |
toret->wsp = malloc(strlen(wsp) + 1); | |
strcpy(toret->wsp, wsp); | |
toret->ctr = -1; | |
return toret; | |
} | |
continue; | |
} | |
else { | |
strcat(cont, buf); | |
continue; | |
} | |
} | |
printf("PANIC PANIC PANIC THIS IS GOING WROOOOONG!!!!!\n"); | |
} | |
void numbrify(struct word **wordlist){ | |
int oc = 0; | |
int roc = oc; | |
struct word *w; | |
while ((w = wordlist[oc]) != NULL){ | |
int ic; | |
if (w->ctr == -1){ | |
for (ic = oc + 1; wordlist[ic] != NULL; ic++){ | |
if (!strcmp(wordlist[ic]->cont, w->cont)){ | |
//printf("**found match between %s and %s**\n", wordlist[ic]->cont, w->cont); | |
wordlist[ic]->ctr = roc; | |
} | |
} | |
if (w->cont[0]!='\0') | |
roc++; | |
} | |
oc++; | |
} | |
} | |
int main(void){ | |
struct word *wlist[4096]; | |
int i = 0; | |
struct word *w; | |
for (i = 0; (w = getword()) != NULL; i++){ | |
wlist[i]=w; | |
} | |
wlist[i+1] = NULL; | |
numbrify(wlist); | |
i = 0; | |
for (i = 0; wlist[i]!=NULL; i++){ | |
if (wlist[i]->ctr == -1) printf("%s%s", wlist[i]->cont, wlist[i]->wsp); | |
else printf("%d%s", wlist[i]->ctr, wlist[i]->wsp); | |
//printf("'%s'\t'%s'\t%d\n", wlist[i]->cont, wlist[i]->wsp, wlist[i]->ctr); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment