PDA

Visualizza la versione completa : [C++] Funzione IntToStr


gygabyte017
28-02-2006, 15:10
Controllate per favore se questa funzione č esatta oppure ha bug?



string IntToStr(long long Value)
{
string Result = "";
unsigned char Temp;
char * Temp2;
bool IsNegative = false;

// Controllo sul negativo
if (Value < 0)
{
Value = -Value;
IsNegative = true;
}
do
{
Temp = Value - ((long)(Value / 10)) * 10;
// Numeri da 48..57 -> 0..9
Temp += '0';
Temp2 = &Temp;
Result = Temp2+ Result;
Value = (long)(Value/10);
}
while (Value > 0);

if (IsNegative)
Result = "-" + Result;

return Result;
}

Generalmente funziona ma non vorrei che ci sono errori "nascosti"...

Grazie :ciauz: :ciauz:

oregon
28-02-2006, 16:14
Sei sicuro che funzioni?

In realta', generalmente, ha problemi ...

Per farlo funzionare devi modificare due linee.

La prima deve diventare



char Temp;


e la seconda



Result = ((char)*Temp2) + Result;


A parte questo, il codice prevede le variabili Temp e Temp2 che non sono utili ... Dai un'occhiata a queste modifiche



string IntToStr(long long Value)
{
string Result = "";
bool vSign = (Value<0);

if(vSign) Value=-Value;

do
{
Result = (char)((Value-(Value/10)*10)+'0') + Result;
Value /= 10;
}
while(Value);

if(vSign) Result = "-" + Result;

return Result;
}

XWolverineX
28-02-2006, 16:42
string IntToStr(long long Value)

Perchč c'č scritto due volte long?

oregon
28-02-2006, 19:38
Se supportato dal compilatore, il dato di tipo

long long

e' un intero a 64 bit.

In VC equivale all' int64

pprllo
28-02-2006, 23:34
Originariamente inviato da oregon
Sei sicuro che funzioni?

In realta', generalmente, ha problemi ...

Per farlo funzionare devi modificare due linee.

La prima deve diventare



char Temp;


e la seconda



Result = ((char)*Temp2) + Result;


A parte questo, il codice prevede le variabili Temp e Temp2 che non sono utili ... Dai un'occhiata a queste modifiche



string IntToStr(long long Value)
{
string Result = "";
bool vSign = (Value<0);

if(vSign) Value=-Value;

do
{
Result = (char)((Value-(Value/10)*10)+'0') + Result;
Value /= 10;
}
while(Value);

if(vSign) Result = "-" + Result;

return Result;
}

La parte finale di quello che hai scritto non credo sia corretta ... Infatti hai scritto l'equivalente di
Result = (char)((Value-Value)+'0') + Result;
che equivale a
Result = (char)('0') + Result;
Io il ciclo do lo farei cosė:


do Result = (char)(Value%10 + '0') + Result; while(Value/=10);

oregon
01-03-2006, 01:41
Sė, in realta' il problema e' derivato dal fatto che e' saltato il cast dopo il copia incolla ... la linea doveva essere

Result = (char)(Value-((long long)(Value/10)) * 10 + '0') + Result;

Ovviamente va bene anche il tuo codice (anzi, con l'operatore modulo e' anche meglio ...

Loading