Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Funzione IntToStr

    Controllate per favore se questa funzione è esatta oppure ha bug?

    codice:
    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Sei sicuro che funzioni?

    In realta', generalmente, ha problemi ...

    Per farlo funzionare devi modificare due linee.

    La prima deve diventare

    codice:
    char Temp;
    e la seconda

    codice:
    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

    codice:
    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;
    }

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,591
    string IntToStr(long long Value)

    Perchè c'è scritto due volte long?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    Se supportato dal compilatore, il dato di tipo

    long long

    e' un intero a 64 bit.

    In VC equivale all' int64

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Originariamente inviato da oregon
    Sei sicuro che funzioni?

    In realta', generalmente, ha problemi ...

    Per farlo funzionare devi modificare due linee.

    La prima deve diventare

    codice:
    char Temp;
    e la seconda

    codice:
    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

    codice:
    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ì:
    codice:
    do Result = (char)(Value%10 + '0') + Result; while(Value/=10);

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,299
    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 ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.