Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
坚持不用任何库函数,练代码能力//http://poj.org/problem?id=1057 #include<stdio.h> struct Dir { char name[16]; int level; Dir *parent; char sonFile[8][16]; int fileNum; }; void strCopy(char *, const char *); int strCmp(const char *, const char *); void strSort(char[][16], int); void setDir(Dir*, const char*, int, Dir*); void printDir(Dir); void printFile(Dir); int main() { for(int T = 1;; T++) { char tStr[16]; gets(tStr); if(!strCmp(tStr, "#")) break; else printf("DATA SET %d:\n", T); Dir root; setDir(&root, "ROOT", 0, NULL); printDir(root); Dir *parentDir = &root; while(1) { if(tStr[0] == ']' || tStr[0] == '*') { strSort(parentDir->sonFile, parentDir->fileNum); printFile(*parentDir); } else if(tStr[0] == 'f') strCopy(parentDir->sonFile[parentDir->fileNum++], tStr); else if(tStr[0] == 'd') { Dir *dir = new Dir(); setDir(dir, tStr, parentDir->level + 1, parentDir); printDir(*dir); parentDir = dir; } if(tStr[0] == ']') { parentDir = parentDir->parent; } else if(tStr[0] == '*') { puts(""); break; } gets(tStr); } } } void strCopy(char *str1, const char *str2) { int i; for(i = 0; str2[i]; i++) str1[i] = str2[i]; str1[i] = 0; } int strCmp(const char *str1, const char *str2) { for(int i = 0; str1[i] || str2[i]; i++) { if(str1[i] < str2[i]) return -1; else if(str1[i] > str2[i]) return 1; } return 0; } void strSort(char strArr[][16], int siz) { for(int i = 0; i < siz - 1; i++) for(int j = i + 1; j < siz; j++) if(strCmp(strArr[i], strArr[j]) == 1) for(int k = 0; strArr[i][k] || strArr[j][k]; k++) { char temp = strArr[i][k]; strArr[i][k] = strArr[j][k]; strArr[j][k] = temp; } } void setDir(Dir *dir, const char *name, int level, Dir* parent) { strCopy(dir->name, name); dir->level = level; dir->parent = parent; dir->fileNum = 0; } void printDir(Dir dir) { for(int i = 0; i < dir.level; i++) printf("| "); puts(dir.name); } void printFile(Dir dir) { for(int i = 0; i < dir.fileNum; i++) { for(int j = 0; j < dir.level; j++) printf("| "); puts(dir.sonFile[i]); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator