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:
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?
Se supportato dal compilatore, il dato di tipo
long long
e' un intero a 64 bit.
In VC equivale all' int64
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);
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 ...