【问题标题】:Check if string is "null" in C++在 C++ 中检查字符串是否为“null”
【发布时间】:2020-10-17 15:08:52
【问题描述】:

我知道std::string不能为null,但是这里我想不出问题,让我解释一下。这是我的功能:

void HandleResponse(Mod::PlayerEntry player, std::string response)

所以response通常有一个json值,我用nlohmann json解析:

auto value = json::parse(response);

在某些情况下,它给出“null”,我使用以下方法进行调试:

std::cout << "response: " << response << ", value: " << value << std::endl;
// outputs: response: null, value: null

现在的问题是我不知道如何比较它是否为空,这是我尝试过的所有不同检查:

if(response == "null"){}
if(response == ""){}
if(response.empty()){}
if(response == 0){}
if(response == std::string("null")){}
if(response.c_str() == "null"){}
if(response.c_str() == NULL){}
if(response.c_str() == '\0'){}
if(value == "null"){}

这些都不起作用。

【问题讨论】:

  • 取决于“null”的含义。如果您的意思是长度为零的字符串,请尝试if (response.length() == 0)if (!response.empty())
  • 可以发一个简单的示例代码吗?
  • 请详细说明“这些都不起作用”。当您尝试这些检查时会发生什么?使用它们的代码是什么?
  • 这是主变量unsigned char **pk,然后这些被定义为auto id = *(unsigned int *) (*pk + 40); auto data = *(std::string *) (*pk + 48);data变量作为response传递给HandleResponse
  • response的类型是什么? json库是否不允许您检查该值是否为空?查看nlohmann 看起来json::parse() 返回json 的对象。请注意,这不是std::stringjson 对象有一个方便的类型检查器:value.is_null()

标签: c++ string null


【解决方案1】:

显然原因很愚蠢。我修剪了字符串:

boost::trim(response);

现在我检查了响应是否为“null”:

if (response == "null") return;

然后繁荣,它的工作原理!

【讨论】:

    【解决方案2】:

    问题是响应可能包含空格。因此,将其与 null 进行精确比较可能比您想象的要难。您需要检查 response 是否包含 null 但其他任何内容都是简单的空白。

    但是查看 nlohmann 库时,json::parse() 函数返回一个 json 类型的对象。

    json value = json::parse(response);
    

    您可以简单地检查值的类型:

    id (value.is_null())    {std::cout << "is null\n";}
    id (value.is_boolean()) {std::cout << "is bool\n";}
    id (value.is_number())  {std::cout << "is numb\n";}
    id (value.is_object())  {std::cout << "is obj\n";}
    id (value.is_array())   {std::cout << "is array\n";}
    id (value.is_string())  {std::cout << "is string\n";}
    

    【讨论】:

      【解决方案3】:

      如果responsestd::string,并将其插入输出流会产生“null”,那么比较它的正确方法是response == "null"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2013-03-07
        相关资源
        最近更新 更多