diff --git a/assignment1/problem3/test_main.c b/assignment1/problem3/test_main.c index 0bc78f5..195e034 100644 --- a/assignment1/problem3/test_main.c +++ b/assignment1/problem3/test_main.c @@ -1,16 +1,79 @@ #include #include +#include #include "uncompress.h" int main() { - Uncompress(NULL, stdout); - Uncompress("", stdout); - Uncompress("abc", stdout); - Uncompress("a1(b)c", stdout); - Uncompress("a11(c)d", stdout); - Uncompress("3(a)2(bc)", stdout); - Uncompress("3(a2(c))", stdout); - Uncompress("2(abb3(cd))ef", stdout); - return 0; + int cnt = 0; + char* str = NULL; + char* res = NULL; + + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", res==NULL?"True":"False"); + if(res==NULL)++cnt; + + str = ""; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "")==0?"True":"False"); + if(strcmp(res, "")==0)++cnt; + + str = "abc"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "abc")==0?"True":"False"); + if(strcmp(res, "abc")==0)++cnt; + + str = "a1(b)c"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "abc")==0?"True":"False"); + if(strcmp(res, "abc")==0)++cnt; + + str = "a11(c)d"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "acccccccccccd")==0?"True":"False"); + if(strcmp(res, "acccccccccccd")==0)++cnt; + + str = "3(a)2(bc)"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "aaabcbc")==0?"True":"False"); + if(strcmp(res, "aaabcbc")==0)++cnt; + + str = "3(a2(c))"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "accaccacc")==0?"True":"False"); + if(strcmp(res, "accaccacc")==0)++cnt; + + str = "2(abb3(cd))ef"; + printf("input: %s\n", str); + res = Uncompress(str); + printf("output: %s\n", res); + printf("judge: %s\n\n", strcmp(res, "abbcdcdcdabbcdcdcdef")==0?"True":"False"); + if(strcmp(res, "abbcdcdcdabbcdcdcdef")==0)++cnt; + + switch(cnt){ + case 8:printf("A\n");break; + case 7: + case 6:printf("B\n");break; + case 5:printf("C\n");break; + case 4: + case 3: + case 2: + case 1:printf("D\n");break; + default:printf("F\n"); + } + } diff --git a/assignment1/problem3/uncompress.c b/assignment1/problem3/uncompress.c index 83c07e1..6871df6 100644 --- a/assignment1/problem3/uncompress.c +++ b/assignment1/problem3/uncompress.c @@ -218,7 +218,7 @@ void ASTCompileTree(ASTTree *tree, FILE *file) { ASTCompileNode(tree->root, file); /* new line at the end */ - fputc('\n', file); + //fputc('\n', file); } void ASTCompileNode(ASTNode *root, FILE *file) { @@ -299,7 +299,10 @@ char ASTScanAll(ASTTree *tree, ASTScanner *scanner) { return 0; } -void Uncompress(char *string, FILE *file) { +char* Uncompress(char *string) { + char *result = (char *)calloc(10000, sizeof(char)); + char *ret = (char *)calloc(10000, sizeof(char)); + FILE *file = fmemopen(result, 10000, "w"); char err; /* create scanner and AST tree */ @@ -325,6 +328,17 @@ void Uncompress(char *string, FILE *file) { /* free memory */ DestroyASTTree(tree); DestroyASTScanner(scanner); + + fclose(file); + file = fmemopen(result, strlen(result), "r"); + char ch; + int i=0; + while((ch = fgetc(file)) != EOF) { + ret[i++] = ch; + } + ret[i] = 0; + + return result; } void DestroyASTScanner(ASTScanner *scanner) { free(scanner); } diff --git a/assignment1/problem3/uncompress.h b/assignment1/problem3/uncompress.h index cb79b19..56c1d92 100644 --- a/assignment1/problem3/uncompress.h +++ b/assignment1/problem3/uncompress.h @@ -74,6 +74,6 @@ void ASTCompileTree(ASTTree *tree, FILE *file); void ASTCompileNode(ASTNode *root, FILE *file); /* A short cut function, directly uncompress the raw string to file stream */ -void Uncompress(char *string, FILE *file); +char* Uncompress(char *string); #endif