Dividere una stringa con delimitatori diversi

di il
1 risposte

Dividere una stringa con delimitatori diversi

Salve ragazzi ho un problema con il mio codice,in sostanza ho una stringa che rappresenta una espressione elementare del tipo 43+1 oppure 39*20 etc...
ho pensato ad un metodo che la prima volta che viene invocato trasforma la parte a sinistra dell'operazione in double e la restituisce, la seconda volta che viene invocata (con il paramentro esplicito settato a NULL) deve restituire la parte a destra della stringa e settare un puntatore con l'operazione corrispondente(il puntatore è stato passato come secondo input alla funzione), il mio problema è il puntatore che corrisponde all'operazione non mantiene il valore dopo che la funzione ha terminato l'esecuzione vi linko il codice:-)

double calcola(char mesg[MAXLINE]){
  char *operazione;
  double primo=0,secondo=0;
  operazione=(char *)malloc(sizeof(char) * MAXLINE);
    primo=tagliaStringa(mesg,NULL);
   printf("primo numero:%lf\n",primo);
    secondo=tagliaStringa(NULL,operazione);
    printf("secondo numero:%lf\n",secondo);
    printf("operazione: %s\n",operazione );

    return 42; // il return lo farò dopo che sarò riuscito a calcolare correttamente l'espressione
}



double tagliaStringa(char messaggio[MAXLINE],char *operazione)
{
  char appoggio[MAXLINE];
  static int i=0;
  static char salva[MAXLINE],car;
   bzero(appoggio,sizeof(appoggio));
   if(messaggio!=NULL)
   {        strcpy(salva,messaggio);
            while(messaggio[i]>='0' && messaggio[i]<='9')
            {
              strcat(appoggio,&messaggio[i]);
              i++;
            }
    return atof(appoggio);
  }
  //else
  if(salva[i]=='m' && salva[i+1]=='o' && salva[i+2]=='d')
  {
      operazione="mod";
      i=i+2;
  }
  else
      {
         car=salva[i];
        operazione=&car;  
        i++;
      }
    while(salva[i]!='\0')
    {
        if(salva[i]>='0'&& salva[i]<='9')
        {
          strcat(appoggio,&salva[i]);
        }
      i++;
    }
     bzero(salva,sizeof(salva));
     i=0;
    return atof(appoggio);
}
grazie mille:)

1 Risposte

  • Re: Dividere una stringa con delimitatori diversi

    A prescindere da tutto, ma perché allochi un intero buffer di MAXLINE per il singolo carattere dell'operazione ?

    E perché non usi semplicemente la funzione strtok ?
Devi accedere o registrarti per scrivere nel forum
1 risposte