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

    [C++] Array di caratteri da Parsificare

    Ciao a tutti ho un piccolo problemini con il parsing di un array di caratteri ...


    codice:
    #include <iostream>
    #include <fstream>
    #include <string.h>
    
    void LibTest (char * theDependancies)
    {
    		int i =0;
    		char aBuffer [1024 * 1024]; // mi riservo 1MB di memoria 
    		memset(aBuffer, 0, sizeof (aBuffer)); // pulisco la zona di memoria che utilizzo per analizzare il file
    		
    			
    		while ( true )
    		{
    			std::cout << i << " - ";
    			const char aChar = theDependancies[i] ;
    			std::cout << aChar << std::endl;
    			i++;
    			if ((theDependancies[i] == '\0') && (theDependancies[i+1] == '\0')) break;
    			// finqui ottendo la stampa di tutti i valori in senso verticale
    			// serve la stampa in senso orizzontale e andare a capo dopo ogli parola
    		
    		}
    		
    		std::cout << i << std::endl; 
    		
    }
    int main(void)
    {
    	char * aDependancies  = "uno\0due\0tre\0quattro\0";
    	LibTest (aDependancies);	
    	return 0;
    }

    l'output che ottengo è

    0 - u
    1 - n
    2 - o
    3 -
    4 - d
    ...
    17 - r
    18 - o
    19

    Io ho bisogno di parsificare l'array e far uscire l'output nel seguente modo

    1 - uno
    2 - due
    3 - tre
    4 - quattro

    Non riesco a capire come impostare la memorizzazioni su aBuffer[] per poi farla stampare a video tutta la parola e andare a capo.
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  2. #2
    forse ci siamo manca poco ....

    Ho capito come fare il parsing ma ancora ho le strighe su collonna anzicche su riga.

    codice:
    #include <iostream>
    #include <fstream>
    #include <string.h>
    
    void LibTest (char * theDependancies)
    {
    		int i =0;
    		int x =0;
    		int count=0;
    		char aBuffer [99]; 
    		memset(aBuffer, 0, sizeof (aBuffer)); // pulisco la zona di memoria che utilizzo per analizzare il file
    		int aExtra = 0;
    			
    		while ( true )
    		{
    			const char aChar = theDependancies[i] ;
    			if (aChar != 0) 
    				{ 
    					aBuffer[i]=theDependancies[i];
    					count++;
    				}
    			else 
    				{
    					std::cout  << "for(y="<< x << " ;y< "<<count <<" ; y++)"<< std::endl;
    					for (int y=x ;y < count+aExtra ; y++)
    					{
    						std::cout << aBuffer[y]; // cosi non stampa nulla
                                                    std::cout << aBuffer[y]<< std::endl;  // stampa ma su colonna
    					}
    					x=count;
    					++aExtra;
    					std::cout  <<std::endl<< "count : "<< count << " x: "<<x << std::endl<< std::endl;
    				}
    			
    			i++;
    			if ((theDependancies[i] == '\0') && (theDependancies[i+1] == '\0')) break;
    			
    			
    		}
    		
    		std::cout << "stringa:" << std::endl;
    		for (int y=x ;y < count+aExtra ; y++)
    					{
    						std::cout << aBuffer[y]; // cosi non stampa nulla
                                                    std::cout << aBuffer[y]<< std::endl;  // stampa ma su colonna
    					}
    		std::cout << "," << std::endl;
    		
    		std::cout << i << std::endl; 
    		
    }
    int main(void)
    {
    	char * aDependancies  = "uno123\0due123\0tre123\0quattro123\0\";
    	LibTest (aDependancies);	
    	return 0;
    }

    Io mi chiedo perchè non stampa nulla su una riga ma vuole per forza il carattere di fine riga ?????
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Così? Scusa ma mi sembra più pratico postare il codice con una semplice modifica al tuo programma originario che debuggare il secondo...

    (comunque sostituisci string.h con cstring in "stile" C++ e anche "char *" con "const char *" sia nella dichiarazione della stringa in main() che nell'intestazione della funzione...)

    codice:
    #include <iostream>
    #include <fstream>
    #include <cstring>
    
    void LibTest (const char * theDependancies)
    {
    		int i = 0, j = 1;
    		char aBuffer [1024 * 1024];
    		memset(aBuffer, 0, sizeof (aBuffer));
    		
    			
    		while ( true )
    		{
    			std::cout << j << " - ";
    
    			while ( theDependancies[i] != '\0' ) {
    				const char aChar = theDependancies[i] ;
    				std::cout << aChar;
    				i++;
    			}
    
    			std::cout << std::endl;
    
    			if ( theDependancies[i+1] == '\0' )
    				break;
    
    			i++;
    			j++;
    		
    		}
    		
    }
    
    int main(void)
    {
    	const char * aDependancies  = "uno\0due\0tre\0quattro\0";
    	LibTest (aDependancies);	
    	return 0;
    }
    every day above ground is a good one

  4. #4
    Con il tuo codice funziona bene Grazie.

    Dalla seconda versione ora la ho estesa e ottimizzata.
    In realtà il problema che ho descritto mi succedeva solo su ECLIPSE ma se compilavo ed eseguivo da Console (Shell) tutto funzionava benissimo.

    Ottimizzando un po il codice sono riuscito a farlo visualizzare bene sia su Eclipse che su Shell provandolo anche su Geany (sono sotto Linux).

    Se vi serve chiedete che posto il codice.
    3/6/2003 è morto l'angelo della mia vita..
    www.markwebinformatica.net
    My BLOG

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