strtol的基础知识?

Jam*_*son 7 c++ string int strtol

我真的很困惑.我必须遗漏一些相当简单的东西,但我读到的关于strtol()的任何内容都没有意义.有人能以一种非常基本的方式为我拼出它,并举例说明我可能会得到类似下面的东西吗?

string input = getUserInput;
int numberinput = strtol(input,?,?);
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 33

第一个参数是字符串.它必须作为C字符串传递,所以如果你先std::string使用它.c_str().

第二个参数是可选的,并指定a char *在数字结尾后存储指向字符的指针.这在转换包含多个整数的字符串时很有用,但如果您不需要它,只需将此参数设置为NULL即可.

第三个参数是要转换的基数(基数).strtol可以做任何事情,从二进制(基数2)到基数36.如果你想strtol根据前缀自动选择基数,传入0.

因此,最简单的用法是

long l = strtol(input.c_str(), NULL, 0);
Run Code Online (Sandbox Code Playgroud)

如果你知道你得到十进制数:

long l = strtol(input.c_str(), NULL, 10);
Run Code Online (Sandbox Code Playgroud)

strtol如果字符串开头没有可转换字符,则返回0.如果要检查是否strtol成功,请使用middle参数:

const char *s = input.c_str();
char *t;
long l = strtol(s, &t, 10);
if(s == t) {
    /* strtol failed */
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是C++ 11,请stol改用:

long l = stol(input);
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用a stringstream,其优点是可以轻松读取多个项目,如cin:

stringstream ss(input);
long l;
ss >> l;
Run Code Online (Sandbox Code Playgroud)