From 0b194fe2ad75a3fc123a62d13ec0addba8aa6f8d Mon Sep 17 00:00:00 2001 From: n0m1s Date: Sun, 12 Jan 2020 12:28:03 +0100 Subject: [PATCH] numbers in string builder --- string_builder.cpp | 28 ++++++++++++++++++++++++++++ string_builder.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/string_builder.cpp b/string_builder.cpp index c81b7ad..036a4e3 100644 --- a/string_builder.cpp +++ b/string_builder.cpp @@ -33,6 +33,34 @@ void StringBuilder::append(char const c) m_front = new_front; } +void StringBuilder::append_number(int x) +{ + if(x < 0) + { + this->append('-'); + x = -x; + } + + int max_divider = 10; + while(x/max_divider > 10) + max_divider*=10; + + while(max_divider > 0) + { + char c = x/max_divider; + x = x%max_divider; + max_divider /= 10; + + this->append_digit(c); + } +} + +void StringBuilder::append_digit(char x) +{ + x = (x % 10) + '0'; + this->append(x); +} + char* StringBuilder::to_string() const { char* ret = new char[m_size + 1]; diff --git a/string_builder.h b/string_builder.h index cab6c83..b0d9210 100644 --- a/string_builder.h +++ b/string_builder.h @@ -26,6 +26,8 @@ class StringBuilder void append(char const c); inline void operator += (char const c) {this-> append(c);} + void append_number(int x); + /** * @brief get the string * @@ -51,6 +53,8 @@ class StringBuilder char m_c; }; + void append_digit(char x); + protected: unsigned int m_size; Node * m_front;