将字符串(以 char * 给出)解析为 int 的 C++ 方法是什么?强大而清晰的错误处理是一个加号(而不是 返回零)。
原文由 Eugene Yokota 发布,翻译遵循 CC BY-SA 4.0 许可协议
将字符串(以 char * 给出)解析为 int 的 C++ 方法是什么?强大而清晰的错误处理是一个加号(而不是 返回零)。
原文由 Eugene Yokota 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 C++17 开始,您可以使用 std::from_chars
来自 <charconv>
标头,如此 处 所述。
例如:
#include <iostream>
#include <charconv>
#include <array>
int main()
{
char const * str = "42";
int value = 0;
std::from_chars_result result = std::from_chars(std::begin(str), std::end(str), value);
if(result.error == std::errc::invalid_argument)
{
std::cout << "Error, invalid format";
}
else if(result.error == std::errc::result_out_of_range)
{
std::cout << "Error, value too big for int range";
}
else
{
std::cout << "Success: " << result;
}
}
作为奖励,它还可以处理其他基数,例如十六进制。
原文由 Pharap 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
在新的 C++11 中有这样的函数:stoi、stol、stoll、stoul 等等。
它将在转换错误时引发异常。
即使这些新函数仍然存在 Dan 指出的 相同问题:它们很乐意将字符串“11x”转换为整数“11”。
查看更多: http ://en.cppreference.com/w/cpp/string/basic_string/stol