首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++字符串流解析

C++字符串流解析
EN

Stack Overflow用户
提问于 2013-10-05 05:54:52
回答 4查看 12K关注 0票数 1

我正在尝试从命令提示符读取有效的用户输入:

例如,有效的用户输入格式如下:

getData <>

<> -任何字符串类型值

在命令提示符下:

例如,getData name =>正确( getData后只输入一个参数,不出所料)例如getData name ID => InCorrect (在getData后输入多个参数)例如getData => InCorrect (由于在getData后没有输入参数)

如何检查参数的数量?我的代码逻辑如下:

代码语言:javascript
复制
string cmd_input;

getline(cin, cmd_input)

stringstream ss(cmd_input);

string input;
string parameter;

 ss >> input; //getData
 ss >> parameter; //name

如何进行有效/无效检查?我不想通过循环运行它直到EOF流,并计算参数的数量。我在peek()上读过,但不确定它是否适合这里。另外,我不想使用向量来存储参数。

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2013-10-05 06:03:37

您可以在检索输入后检查流本身的状态。如果检索成功,则为true。您希望它在两次检索后返回true,但在第三次检索时返回false

代码语言:javascript
复制
if (!(ss >> input1) || input1 != "getData") { //... error : unexpected cmd
}
if (!(ss >> input2)) { //... error: no param
}
if (ss >> input3) { //... error: too many params
}
//... okay
票数 1
EN

Stack Overflow用户

发布于 2013-10-05 06:05:05

在不使用循环甚至不使用std::vector的约束下,它可能看起来如下所示:

代码语言:javascript
复制
std::string line, command, arg1, arg2, arg3;

if (std::getline(std::cin, line)) {

    std::istringstream is(line);
    if (is >> command) {
        std::string word;
        if (is >> arg1) {
            ...
            if (is >> arg2) {
                ...
                if (is >> arg3) {
                     ...
                }
            }
        }
    } // end of is >> command
}

然而,如果您改变主意并决定使用std::vector,它可能如下所示:

代码语言:javascript
复制
std::string line, command;
std::vector<std::string> arguments;

if (std::getline(std::cin, line)) {

    std::istringstream is(line);
    if (is >> command) {
        std::string word;
        while (is >> word)
            arguments.push_back(word);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-05 06:03:55

代码语言:javascript
复制
ss >> input;
if( ss.eof() )
    //no parameter code
else
{
    ss >> param;
    if( !ss.eof() )
         // too many param code
    else
         // good input
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19191410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档