我正在尝试使用类似的方法strcmp来比较“Hello 4”等命令并将 4 保留为变量
像这样的东西:
if(strcmp(c, "Hello %d") == 0){
int num = %d;
}
Run Code Online (Sandbox Code Playgroud)
您正在寻找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)。因此请注意不要在失败分支中引用该变量。