Lexical conversion.
John Carter
john.carter@tait.co.nz
Tue Oct 15 17:14:00 GMT 2002
On Tue, 15 Oct 2002, Claudio Bley wrote:
> >>>>> "John" == John Carter <john.carter@tait.co.nz> writes:
>
> John> What is the fastest way under gcc-3.* to convert from an int
> John> to a string? ie. Equivalent to this yucky bit of code...
>
> We are talking about C++, right? I don't know how fast it is (or what
> your constrains are), but I would use something like that:
>
> #include <sstream>
>
> string convert (const int number) {
> ostringstream ostr;
> ostr << number;
> return ostr.str ();
> }
Sigh! I decided (especially as most the cases I worry about are in 0-9) to
implement it like so.. (I unit tested it so I'm reasonable confident it
works and its about 3 times faster in the general case than using printf)
string convert(const int value) {
int abs_value;
if (value >= 0) {
// Optimise for single digit case...
if (value <= 9) {
return string( 1, '0'+value);
}
abs_value = value;
} else {
abs_value = -value;
}
char buf[100];
char * start = buf+100;
char * end = start;
do {
*(--start) = '0' + abs_value % 10;
abs_value /= 10;
} while (abs_value);
if( value < 0) {
*(--start) = '-';
}
return string(start, end-start);
}
--
John Carter Phone : (64)(3) 358 6639
Tait Electronics Fax : (64)(3) 359 4632
PO Box 1645 Christchurch Email : john.carter@tait.co.nz
New Zealand
Good Ideas:
Ruby - http://www.ruby-lang-org - The best of perl,python,scheme without the pain.
Valgrind - http://developer.kde.org/~sewardj/ - memory debugger for x86-GNU/Linux
Free your books - http://www.bookcrossing.com
More information about the Gcc-help
mailing list