假设我们有一个字符范围:
// For example
const char *valueBegin="123blahblah"; // Beginning of value
const char *valueEnd=valueBegin+3; // One past end of value
Run Code Online (Sandbox Code Playgroud)
...,我想将其转换为int:
int value=...// Given valueBegin and valueEnd, calculate
// the number stored starting at valueBegin
Run Code Online (Sandbox Code Playgroud)
有什么好的C++ 11方法可以做到这一点?
显然,您可以创建std::string并使用stoi或将其复制到临时的NUL终止字符数组,然后它很容易(例如,通过atoi或strtol).
想想一种不涉及将字符复制到某个临时数组/对象的方法 - 换句话说就是一个就地处理字符数据的函数.
更新:
很多答案,但请在回答之前考虑一下.范围没有NUL终止,因此需要valueEnd.你不知道超出值的是什么(也就是说,valueEnd可能超出了包含该值的缓冲区),所以如果你的答案没有使用valueEnd,那就错了.此外,如果您的答案创建了一个临时std::string对象,则不在此问题的指导范围内.
std::cout << boost::lexical_cast<int>(sBegin, 3) << std::endl;
Run Code Online (Sandbox Code Playgroud)
这不会产生任何临时性并支持任何类型的角色范围.它也很快.
如果要避免使用长度说明符,则可以使用boost::iterator_range:
std::cout << boost::lexical_cast<int>(boost::make_iterator_range(begin, end)) << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |