#include <iostream>
#include <string>
#include <vector>
#include <cctype>
std::vector<std::string> parse(const char* cmd, int length)
{
std::vector<std::string> arguments;
const char *start = cmd;
const char *stop = cmd + length;
while (start < stop) {
while ((start < stop) && isspace(*start)) ++start;
if (start == stop) break;
const char *end = start + 1;
while ((end < stop) && !isspace(*end)) ++end;
arguments.push_back(std::string(start, end-start));
start = end + 1;
}
return arguments;
}
int main()
{
const char cmd[] = "param1 param2 param3";
std::vector<std::string> args = parse(cmd, sizeof(cmd)-1);
for(auto &s : args)
std::cout << s << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2N0eXBlPgoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcnNlKGNvbnN0IGNoYXIqIGNtZCwgaW50IGxlbmd0aCkKewogICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGFyZ3VtZW50czsKICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gY21kOwogICAgY29uc3QgY2hhciAqc3RvcCA9IGNtZCArIGxlbmd0aDsKICAgIHdoaWxlIChzdGFydCA8IHN0b3ApIHsKICAgICAgICB3aGlsZSAoKHN0YXJ0IDwgc3RvcCkgJiYgaXNzcGFjZSgqc3RhcnQpKSArK3N0YXJ0OwogICAgICAgIGlmIChzdGFydCA9PSBzdG9wKSBicmVhazsKICAgICAgICBjb25zdCBjaGFyICplbmQgPSBzdGFydCArIDE7CiAgICAgICAgd2hpbGUgKChlbmQgPCBzdG9wKSAmJiAhaXNzcGFjZSgqZW5kKSkgKytlbmQ7CiAgICAgICAgYXJndW1lbnRzLnB1c2hfYmFjayhzdGQ6OnN0cmluZyhzdGFydCwgZW5kLXN0YXJ0KSk7CiAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwogICAgfQogICAgcmV0dXJuIGFyZ3VtZW50czsKfQoKaW50IG1haW4oKQp7Cgljb25zdCBjaGFyIGNtZFtdID0gInBhcmFtMSBwYXJhbTIgcGFyYW0zIjsKCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhcmdzID0gcGFyc2UoY21kLCBzaXplb2YoY21kKS0xKTsKCWZvcihhdXRvICZzIDogYXJncykKCQlzdGQ6OmNvdXQgPDwgcyA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==