char * simplifyPath(char * path){ char *stack[100]; int size = 0; for (char *s = strtok(path, "/"); s; s = strtok(NULL, "/")) { if (strcmp(s, ".") == 0) { //do nothing } else if (strcmp(s, "..") == 0) { //back size = fmax(0, size-1); } else { stack[size++] = s; } } if (size == 0) return "/"; char *res = calloc(1000, sizeof(char)); for (int i=0; i<size; ++i) { strcat(res, "/"); strcat(res, stack[i]); } return res; }
char * simplifyPath(char * path){ int len = strlen(path), i, left=0, pst=0; char* s = (char*)calloc(len+1, sizeof(char)); int end[100] = { 0 }; for (i = 0; i < len; i++){ if (i + 1<len && path[i] == '/' && path[i+1] != '/'){ left = i; if (i + 1 < len && path[i + 1] == '.' && ( i+2 >= len || path[i+2] == '/') ){ i += 1; } else if (i + 1 < len && path[i + 1] == '.' && i + 2 < len && path[i + 2] == '.' && (i + 3 >= len || path[i + 3] == '/') ){ if (pst > 0) pst--; i += 2; } else{ while (i+1 < len && path[i + 1] != '/') i++; memcpy(s + end[pst], path + left, i - left + 1); end[pst + 1] = end[pst] + i - left + 1; pst++; } } } s[end[pst]] = '\0'; return (*s)?s :"/"; }