PDA

Visualizza la versione completa : [C] Dividere numeri da caratteri


teju
15-01-2005, 12:43
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...


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
15-01-2005, 17:19
Uppo.... :zizi:
Nessuna idea??

unomichisiada
15-01-2005, 19:05
#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ì.

teju
15-01-2005, 21:23
Originariamente inviato da unomichisiada
Prova così.
:unz: sei un fenomeno, grazie!! :unz:

Loading