mirror of
https://git.ari.lt/ari.lt/ari.lt.git
synced 2025-02-05 01:59:25 +01:00
7b00b3bb81
Signed-off-by: Ari Archer <truncateddinosour@gmail.com>
80 lines
3.4 KiB
HTML
80 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
|
<title>Ari::web -> Blog</title>
|
|
<meta
|
|
content="website webdev linux programming ari terminal dark blog javascript opensource free"
|
|
name="keywords"
|
|
/>
|
|
<meta
|
|
content="Blog on 2022-01-20 17:10:10 EET - Fast atoi() in C and C++"
|
|
name="description"
|
|
/>
|
|
<meta content="follow" name="robots" />
|
|
</head>
|
|
<body>
|
|
<div>
|
|
<h1>Fast atoi() in C and C++</h1>
|
|
<p>
|
|
2022-01-20 17:10:10 EET |
|
|
<a href=".."> back </a>
|
|
|
|
|
<a href="/"> home </a>
|
|
|
|
|
<a href="/git"> git </a>
|
|
</p>
|
|
<hr />
|
|
|
|
<p>
|
|
<code>std::atoi</code> (in C++) is fast on its own but can be slow so
|
|
for stuff you need speed you can use this:
|
|
</p>
|
|
<ul>
|
|
<li>Option one</li>
|
|
</ul>
|
|
<pre><code><span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">fast_atoi</span>(<span class="hljs-params"><span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *int_string</span>) </span>{
|
|
<span class="hljs-keyword">int</span> <span class="hljs-keyword">value</span> = <span class="hljs-number">0</span>;
|
|
|
|
<span class="hljs-keyword">while</span> (*int_string && *int_string >= <span class="hljs-string">'0'</span> && *int_string <= <span class="hljs-string">'9'</span>)
|
|
<span class="hljs-keyword">value</span> = <span class="hljs-keyword">value</span> * <span class="hljs-number">10</span> + (*int_string++ - <span class="hljs-string">'0'</span>);
|
|
|
|
<span class="hljs-keyword">return</span> <span class="hljs-keyword">value</span>;
|
|
}
|
|
</code></pre>
|
|
<p>
|
|
This requires no headers, just pure C (also valid in C++), you can put
|
|
this into your code and it will just work!
|
|
</p>
|
|
<ul>
|
|
<li>Option two</li>
|
|
</ul>
|
|
<pre><code><span class="hljs-meta">#include <assert.h></span>
|
|
|
|
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">fast_atoi</span>(<span class="hljs-params"><span class="hljs-keyword">char</span> *int_string</span>) </span>{
|
|
<span class="hljs-keyword">int</span> <span class="hljs-keyword">value</span> = <span class="hljs-number">0</span>;
|
|
|
|
<span class="hljs-keyword">while</span> (*int_string) {
|
|
<span class="hljs-keyword">if</span> (!(*int_string >= <span class="hljs-string">'0'</span> && *int_string <= <span class="hljs-string">'9'</span>))
|
|
assert(<span class="hljs-number">0</span> && <span class="hljs-string">"atoi(): invalid int_string"</span>);
|
|
|
|
<span class="hljs-keyword">value</span> = <span class="hljs-keyword">value</span> * <span class="hljs-number">10</span> + (*int_string++ - <span class="hljs-string">'0'</span>);
|
|
}
|
|
|
|
<span class="hljs-keyword">return</span> <span class="hljs-keyword">value</span>;
|
|
}
|
|
</code></pre>
|
|
<p>
|
|
This option is throws an assertion error if it encounters an invalid
|
|
string but this requires <code>assert.h</code> as a dependency.
|
|
</p>
|
|
<p>
|
|
In C++ <code>assert.h</code> should be replaced with
|
|
<code>cassert</code>.
|
|
</p>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
<!-- this is automatically generated by scripts/add_blog -->
|