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ì.