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

    [C++] Riempire una stringa con "0"

    Salve a tutti.
    Ho un piccolo problema con un codice in c++
    L'obiettivo è quello di riempire con degli zeri una stringa nel caso in cui la sua lunghezza sia minore di 3.
    Es. Se ricevo 4, il programmino deve restituire una stringa del tipo "004"; con 23 --> "023".
    Detto questo, ecco il codice:


    codice:
    int lung4=strlen(temp->cod_4);
         if (lung4<3){
            int diff=3-lung4;
            char car[2];
            for (i=0;i<diff; i++){
                car[i]='0';
            }
         strcat(car,temp->cod_1);
         cout<<"\nSTRINGA:   "<<car<<"\n";
         strcpy(temp->cod_1,car);
         cout<<"\nSTRINGA:   "<<temp->cod_1<<"\n";
         }
    Il funzionamento mi sembra abbastanza chiaro e semplice. Tuttavia non funziona, restituisce una cosa completamente diversa, magari mettendo anche caratteri >90 tra gli zeri e il numero in questione.
    Avete qualche idea? O qualche altro metodo più semplice per risolvere?
    Grazie
    Ciao ciao
    Roberto
    OnLine il nuovo sito: www.lasfidacontinua.it

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dato che utilizzi il C++, perchè non usare la classe

    string

    al posto delle stringhe del C ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Usa la sprintf()

    codice:
    	int val = 0;
    	char str[4];
    	if(val>999 || val<-99)
    	{
    		perror("\nVal e' troppo grande !\n");
    		return -1;
    	}
    	sprintf( str, "%03d", val);
    	printf("str = \"%s\"\n", str);
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    @oregon: purtroppo si tratta di un programma per l'università, dove purtroppo le string non le hanno ancora spiegate, quindi...

    @Samuele_70: ora funziona! grazie mille.
    Tuttavia, perchè il codice che ho postato io è sbagliato e non funziona?
    Grazie

    Ciao ciao
    OnLine il nuovo sito: www.lasfidacontinua.it

  5. #5

    Re: [C++] Riempire una stringa con "0"

    Originariamente inviato da rob_santini

    codice:
    int lung4=strlen(temp->cod_4);
         if (lung4<3){
            int diff=3-lung4;
            char car[2];       // 2 caratteri sono pochi, dovresti usarne 5 (4+1per il terminatore)
            for (i=0;i<diff; i++){
                car[i]='0';
            }
         strcat(car,temp->cod_1); // ERRORE ! alla stringa car[] non hai messo il terminatore '\0' !!! 
         cout<<"\nSTRINGA:   "<<car<<"\n";
         strcpy(temp->cod_1,car);
         cout<<"\nSTRINGA:   "<<temp->cod_1<<"\n";
         }
    La stringa car[] che dichiari è decisamente troppo corta, per sicurezza dovrebbe essere di
    almeno 5 caratteri ovvero la massima dimensione richiesta + uno per il terminatore.
    Ho notato che non metti il teminatore alla stringa, le NULL terminated string tipiche del linguaggio C,
    si chiamano in questo modo proprio perchè la fine di ogni stringa è segnalata dal carattere
    NULL o '\0' insomma uno valore 0.
    Tutte le funzioni create per questo tipo di stringhe danno per scontato che detto terminatore
    esista e che si trovi entro la sequenza di celle di memoria riservate alla stringa stessa,
    pena un probabile crash del programma.

    Ad ogni modo, se il valore è già convertito in una stringa, potresti usare una soluzione come questa:
    codice:
    	temp->cod_4[4]=0; // Opzionale, di sicurezza ;)
    	while( strlen(temp->cod_4)<4 )
    	{
    		for( int i=4; i>0; i--)
    			temp->cod_4[i] = temp->cod_4[i-1];
    		temp->cod_4[0]='0';
    	}
    Ovviamente si presume che anche la stringa temp->cod_4[] sia di almeno 5 char
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Ok grazie mille della dritta.
    Posso farti ancora due domande (se è il caso apro un altro topic)?
    1)come faccio a concatenare un carattere ad una stringa? Se faccio strcat(stringa, carattere) dà errore...
    2)Ho trovato questa ottima funzione per ottenere data e ora del sistema:

    codice:
    //Funzione per ottenere ora ///
    /*char *ora(){
         time_t rawtime;
         struct tm * timeinfo;
    
         time ( &rawtime );
         timeinfo = localtime ( &rawtime );
         char ciao[30];
         strcpy(ciao,asctime (timeinfo));
         return ciao;
    
    }*/
    Tuttavia, se provo a richiamarla nel main, dice che "ora non può essere usata come funzione". Perchè? Come posso risolvere???

    Grazie
    Ciao
    OnLine il nuovo sito: www.lasfidacontinua.it

  7. #7
    Quella funzione è concettualmente errata.
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    
    void GetTimeStr(char *str)
    {
    	time_t     rawtime;
    	struct tm *timeinfo;
    
    	time ( &rawtime );
    	timeinfo = localtime ( &rawtime );
    	strcpy( str,asctime (timeinfo));
    }
    
    int main( void )
    {
    	char str[50];
    	GetTimeStr(str);
    	printf("str = %s\n\n", str);
    
    	/* ------------------ */
    	char str1[20]="Ciao";
    	char ch[2]="\0\0";
    	ch[0] = 0x21;
    	// char ch[2]={0x21, 0};  // Netodo alternativo
    	printf("str = %s\n\n", str1);
    	strcat( str1, ch);
    	printf("str = %s\n\n", str1);
    
    	getchar();
    	return 0;
    }
    Per la questione di appendere un carattere ad un stringa c'è anche un'altra soluzione qui :
    http://forum.html.it/forum/showthrea...6#post12176296
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.