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

    [C] Dividere numeri da caratteri

    Ciao gente, parlo di ANSI C.

    Io ho un array di dimensioni non conosciute, contenente una stringa di dati.
    Tali dati sono così composti: una consonante e tot numeri, poi ancora consonante e tot numeri... etc...
    Esempio: W12S345W1

    Voglio arrivare a suddividere la stringa per avere W 12 e chiamare una funzione, poi S 345 e richiamare altra funzione e W 1 e richiamare ancora una funzione...

    Ovviamente la funzione da chiamare avrà come parametri un char e un int, dunque la sequenza di numeri (dentro la stringa) devo pure appunto trasformarli in un dato "int" al posto che "char"...

    Io avevo una idea così, ma mi crasha...
    codice:
    char *beta;
    int i = 0;
    int j;
    
    // la lettura di beta so già come effettuarla...
    beta = leggi_parola();
    do
    {
    direzione = beta[i];
    i++;
    j=0;
    while('0' <= beta[i] <= '9')
    {
    	if(j==0)
    	{
    		spostamento = (int) beta[i];
    	}
    	else
    	{
    		spostamento *= 10;
    		spostamento += (int) beta[i];
    	}
    	i++; j++;
    }
    funzione(direzione, spostamento);
    } while(direzione!='\0');
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  2. #2
    Uppo....
    Nessuna idea??
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  3. #3
    codice:
    #include <stdio.h>
    
    void function(char dir,int displacement);
    int nextToken(char* string,char* dir,int* disp,int* curPos);
    
    int main()
    {
        char string[] = "W124S345W1";
        char direction;
        int displacement,currentPosition = 0 ;
        while(nextToken(string,&direction,&displacement,&currentPosition))
            function(direction,displacement);
            
        system("PAUSE");
        return 0;
    }
    int nextToken(char* string,char* dir,int* disp,int* curPos)
    {
    	int i,count;
    	char *buf;
    	*disp = 0;
    	//valore non valido di curPos
        if(*curPos < 0)
            return 0;
        
        //estrae il carattere
        if(isalpha(string[*curPos]))
    	{
    		*dir = (char)string[*curPos] ;
    		(*curPos)++;
    	}
    	else return 0;
    	
    	//conta le cifre del token corrente
        for(count = 0;string[*curPos] != '\0' && isdigit(string[*curPos]);(*curPos)++,count++);
        
        //salva i caratteri numerici del token in un buffer
        //e poi converte il tutto in intero.Occhio all'overflow
        // se vuoi scrivere numeri molto grandi usa i double invece
        // degli int
        buf = (char*)malloc(count+1);
        strncpy(buf,string + (*curPos) - count,count);
        *disp = atoi(buf);
    	return 1;
            
             
            
    }
    void function(char dir,int displacement)
    {
    	printf("%c%d\n",dir,displacement);
    }
    Prova così.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Originariamente inviato da unomichisiada
    Prova così.
    sei un fenomeno, grazie!!
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

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