4

所以我正在创建一个命令行应用程序,并且我试图允许带有参数的命令,或者如果参数用引号括起来,它将被视为 1 个参数。

示例:测试“1 2”

“test”将是命令,“1 2”将是传递的单个参数。

使用以下代码片段:

while(getline(t, param, ' ')) {
    if (param.find("\"") != string::npos) {
        ss += param;
        if (glue) {
            glue = false;
            params.push_back(ss);
            ss = "";
        }
        else {
            glue = true;
        }
    }
    else {
        params.push_back(param);
    }
}

但是 std::getline 似乎会自动删除导致我的参数从“1 2”变为“12”的空格

我环顾四周,但结果充斥着“如何删除空格”的答案,而不是“如何不删除空格”

有人有什么建议吗?

4

2 回答 2

8

然而 std::getline 似乎会自动删除空格

这正是您告诉 getline 要做的事情:

getline(t, param, ' ');

getline 中的第三个参数是分隔符。如果你想解析输入行,你应该阅读它直到'\n'找到然后处理它:

while(getline(t, param)) {
    /* .. */
}
于 2012-04-10T18:04:55.517 回答
1

嗯,您是在告诉它' '用作std::getline. 当然,它会去除空白。 http://www.cplusplus.com/reference/string/getline/

于 2012-04-10T18:04:52.043 回答