比较“Hello 4”与 C++ 中的输入

0 c++ string-comparison

我正在尝试使用类似的方法strcmp来比较“Hello 4”等命令并将 4 保留为变量

像这样的东西:

if(strcmp(c, "Hello %d") == 0){
    int num = %d;
}
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 5

您正在寻找sscanf,它使用scanf您正在使用的 -style 百分比编码器,并采用要解析的字符串作为其参数(以及用于存储成功解析的指针)。

它返回成功存储的参数数量,或者在 EOF 错误的情况下返回负数。在您的情况下,如果我们成功存储一个参数,我们将认为它是成功的解析。如果我们得到一个零,那就是一个失败的解析,如果我们得到一个负数,那就是一个过早的 EOF,所以我们希望结果sscanf大于零。

#include <cstdio>
#include <iostream>

int main() {
  const char* c = "Hello 100";
  int num;
  if (std::sscanf(c, "Hello %d", &num) > 0) {
    std::cout << "Success! " << num << std::endl;
  } else {
    std::cout << "Failure..." << std::endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在else分支中,num不会分配变量,因此它将具有您的代码之前分配给它的任何值(在我此处显示的代码示例中,该值根本没有任何值,因此为 UB)。因此请注意不要在失败分支中引用该变量。