stringstream(或boost)是否具有一些智能格式功能?

时间:2014-10-25 11:29:52

标签: c++ formatting iostream sstream

我今天正在写一些爱好代码以获得乐趣,虽然我做了一些东西,但我想以一种听起来很棒/很棒/很酷的方式来做一些有趣的事情。

这个想法基本上就是你在C ++中有一个字符串并将它传递给stringstream(构造ss)。

然后,预期格式为<int or string> <string>,您将根据用户输入获得正确的输出,如:

bool ExecuteSendPrivateMessage(int sender, std::string params)
{
    std::stringstream sparams(params);
    int_or_string receiverid;
    std::string message;

    sparams >> receiverid >> message;

    if (sparams.fail())
    {
        std::cout << "usage: /send_message_to <userid/username> <message>" << std::endl;
        return true;
    }
    if (int_or_string.HasString())
    {
        receiverid = GetUseridFromUsername(int_or_string.GetString());
    }
    SendMessage(receiverid.GetInt(), message);
    return true;
}

这在C ++中是否可行?或者将C ++与Boost结合使用?

假设没有用户的名字只包含数字字符?

1 个答案:

答案 0 :(得分:2)

有点像hacky方式,但我要做的是将receiverid放入stringstream,然后尝试从stringstream读入一个int。如果设置了sstream的失败标志,那么我们必须有一个字符串,所以我们使用初始接收者ID。

这样的事情:

std::string recieverid;
std::stringstream srecieverid(recieverid);
int irecieverid;
srecieverid >> irecieverid;
if(srecieverid.fail()) {
   irecieverid = GetUseridFromUsername(recieverid);
}
SendMessage(irecieverid, message);

这不是最干净的方式,但它确实有效。