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

标签 c++ formatting iostream sstream

我今天正在编写一些爱好代码来取乐,在我做一些事情的同时,我想到了一些有趣的事情,我想以一种听起来和看起来不错/很棒/很酷的方式来做。

这个想法基本上是你在 C++ 中有一个字符串,然后将它传递给一个字符串流(以构造 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 结合使用?

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

最佳答案

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

像这样:

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

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

关于c++ - stringstream(或 boost)是否有一些智能格式功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561867/

相关文章:

c++ - 将字符串列表输出到 ostream

c++ - std::ios_base::sync_with_stdio 如何影响流缓冲?

c++ - 为什么使用引用限定符 & 声明删除的赋值运算符

c++ - 如何在 MFC 应用程序中自定义 CMFCMenuBar

bash - 如何在 bash 中打印一些文本并用空格填充到一定宽度?

sql - 从 trunc() 函数返回的数字中删除尾随零

c# - JSON 序列化输出具有 C# 转义格式

c++ - 为什么 std::getline() 在格式化提取后跳过输入?

c++ - 为什么我不能直接在临时对象上调用 operator() ?

c++ - 避免 C++ 循环中复杂对象的最小范围效率低下的技术?