/* main */ int main(int argc, char * argv[]) { Prefs prefs; int o; char * p; memset(&prefs, 0, sizeof(prefs)); prefs.pid = -1; while((o = getopt(argc, argv, "g:p:u:")) != -1) switch(o) { case 'g': prefs.group = optarg; break; case 'p': prefs.pid = strtol(optarg, &p, 0); if(optarg[0] == '\0' || *p != '\0' || prefs.pid < 0) return _usage(); break; case 'u': prefs.username = optarg; break; default: return _usage(); } if(optind != argc) return _usage(); return (_ps(&prefs) == 0) ? 0 : 2; }
void _ps(const char * b, const char * e, char * buf, int i) { if (b == e) { if (i == 0) { std::cout << "[]\n"; } else { buf[i] = 0; std::cout << buf << '\n'; } return; } buf[i] = *b; _ps(b + 1, e, buf, i + 1); _ps(b + 1, e, buf, i); }
void print_powerset(const char * str) { if (!str || !*str) { std::cout << "[]\n"; return; } size_t len = strlen(str); char * buf = new char[len+1]; _ps(str, str + len, buf, 0); delete[] buf; }