Isolare cifre del tipo 0,00123

di il
6 risposte

Isolare cifre del tipo 0,00123

Salve a tutti
qualcuno mi potrebbe suggerire un buon metodo per fare la seguente cosa:
per esempio
ho un numero in questo formato 0.002340567
io vorrei isolare tutte le cifre e metterle in un vettore
esempio:
vett[0]=0
vett[1]=0
vett[2]=0
vett[3]=2
e via dicendo.

premessa il numero non è costante ma è il risultato di un calcolo.
il formato del numero e long double mentre il vettore e di interi.

ringrazio anticipatamente chiunque mi aiuti

6 Risposte

  • Re: Isolare cifre del tipo 0,00123

    Scrivi il tutto il una stringa e ogni carattere lo metti nel vettore.
  • Re: Isolare cifre del tipo 0,00123

    Il problema sta chè la cifra viene da un calcolo tra variabili double o long double e non è costante.
    per esempio 134476/180909
    quando si converte un numero in carattere il carattere non conterà il carattere numerico ma un simbolo che è un carattere esempio (numero intero ) variabile numerica 14
    corrispettivo carattere = "?" mentre a me serviva solo '1' in un carattere e il '4' nel carattere successivo.
    mentre se nella variabile numerica c'è 0.002340567 nella conversione il computer tenderà a convertirmi solo la parte intera cioè lo zero.
    spero di aver fatto capire quale è il problema.
  • Re: Isolare cifre del tipo 0,00123

    No, perche dalle prove che ho fatto la conversione viene fatta tenendo conto di tutto.
    giusto un esempio con sprintf, anche se puoi usare lo std::stringstream
    
    sprintf(tmp,"%lg",&val);
    
    ogni cella di tmp conterrà un numero compreso da 0 a 9 come carattere. basta a questo carattere sottrarli lo '0' e avrai il tuo numero.
    
    pseudocodice:
    each vett[i] = tmp[i] - '0';
    
  • Re: Isolare cifre del tipo 0,00123

    Ciao
    scusa se non ho potuto rispondere prima impegni lavorativi.
    comunque ho provato std::stringstream
    ma i risultati non sono quelli sperati.
    ti posto il codice di esempio che ho usato per provare la funzione
    forse ho fatto qualche errore se non fosse così per caso conosci qualche atro sistema ?
    il codice e scritto per visual c++ 2008 e non ci sono errori di compilazione.
    #include "stdafx.h"
    #include <iostream>
    #include <sstream>
    
    using std::cin;
    using std::cout;
    using std::endl;
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	long double numero;
    	char tasto;
    	const char* wat;
    	char stringa[27];
    	numero=1292345679.90123456;
    	std::stringstream lol;
      lol << numero;
        wat = lol.str().c_str();
        for (int indy=0;indy<27;indy++)
    	   {
    		   tasto=*wat;
    		   tasto = tasto;
    		   stringa[indy] = tasto;
    		   *wat++;
    	   }
    	for (int indy=0;indy<27;indy++)
    	   {
    		   cout << stringa[indy] << endl;
    		   
    	   }
        cin >> tasto;
    		return 0;
    }
    grazie per l'aiuto che saprai darmi
  • Re: Isolare cifre del tipo 0,00123

    Prova:
    
    #include "stdafx.h"
    #include <iostream>
    #include <sstream>
    #include <string>
    
    using std::cin;
    using std::cout;
    using std::endl;
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    
       long double numero;
       char tasto;
       string stringa;
       numero=1292345679.90123456;
       std::stringstream lol;
       lol.precision(20);
    	lol << fixed << numero;
        lol >> stringa;
    	int vettore[20];
    	int i = 0;
    	for(string::iterator it = stringa.begin(); it != stringa.end(); ++it)
    	{
    		if(*it != '.')
    		{
    			vettore[i++] = *it - '0';
    		}
    	}
    
    
        return 0;
    }
    
  • Re: Isolare cifre del tipo 0,00123

    La procedura non funziona correttamente
    inquanto quando vado a stampare la stringa, con cout, mi stampa anche parecchi zero in più.
    quando vado a stamparmi il vettore mi da il seguente risultato:
    3158064
    2
    9
    2
    3
    4
    5
    6
    7
    9
    -858993460
    9
    0
    1
    2
    3
    4
    6
    0
    0
    e poi va in crash
    #include "stdafx.h"
    #include <iostream>
    #include <sstream>
    #include <string>
    
    using std::cin;
    using std::cout;
    using std::endl;
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
       long double numero;
       char tasto;
       string stringa;
       numero=1292345679.90123456;
       std::stringstream lol;
       lol.precision(20);
       lol << fixed << numero;
       lol >> stringa;
       int vettore[20];
       char stringa2[20]; // riga aggiunta
       int i = 0;
       for(string::iterator it = stringa.begin(); it != stringa.end(); ++it)
       {
    	  stringa2[i] = *it; // riga aggiunta
          if(*it != '.')
          {
             vettore[i] = *it - '0'; // riga modifica prima era vettore[i++]
          }
    	  i++; // riga aggiunta
       }
    //+------------+
    //¦ cliclo di stampa.  ¦
    //+------------+
        cout << "numero stampato come stringa = " << stringa << endl;
    	cout << "numero stampato come vettore " << endl;
    	for (int indy=0;indy < 20;indy++)
    	   {
    		   cout << vettore[indy] << "------" << stringa2[indy] << endl;
    	   }    
    return 0;
    }
    comunque anche senza le modifiche andava in crash.
Devi accedere o registrarti per scrivere nel forum
6 risposte