Estrarre numeri da argv

di il
4 risposte

Estrarre numeri da argv

Salve sono nuovo nel forum, quindi non so se sono nella sezione giusta.
Devo realizzare un programma in c che prende come input due stringhe passate da linea di comando (quindi con argv) ed estrapolare da queste stringhe solo i numeri e farci la somma.
Ad esempio "hd34b d. h3 2" e mi dovrebbe risultare 3+4+3+2=12
Spero che mi possiate aiutare. Grazie.

4 Risposte

  • Re: Estrarre numeri da argv

    Ok, ma tu cosa non sai fare? Non è chiaro ...

    Hai iniziato a scrivere il codice? Sai ottenere le stringhe da argv?
  • Re: Estrarre numeri da argv

    oregon ha scritto:


    Ok, ma tu cosa non sai fare? Non è chiaro ...

    Hai iniziato a scrivere il codice? Sai ottenere le stringhe da argv?
    Ho iniziato a scrivere il programma, ma ho scritto decisamente poco.
    ********************************************
    int main(int argc, char *argv[])
    {printf("%s\n", argv[1]);
    return 0;
    }
    *******************************************
    Eseguendolo con
    ./main "fsdyu9 sf5bs 37 sa"
    lui mi ristampa ciò che gli ho passato, il mio problema è estrapolare quei 9, 5, 3 e 7
  • Re: Estrarre numeri da argv

    Controlla i caratteri della stringa con la funzione isdigit (http://en.cppreference.com/w/c/string/byte/isdigi) poi li converti in interi con la funzione atoi (http://en.cppreference.com/w/c/string/byte/ato) e li sommi.
  • Re: Estrarre numeri da argv

    Puoi usare strtol che è più robusta di atoi. Oppure puoi scriverne una da te ricordando che '0' è 48 nel codice ASCII.
    EDIT: mi sono liberato degli impegni quotidiani.Ecco una possibile soluzione un po' rozza:
    
    typedef enum {FALSE,TRUE} bool_t;
    bool_t sum_string_digits(char *string, int *result)
    {
      if(string == NULL || result == NULL)
      {
         return FALSE;
      }
      int sum = 0;
      int current_digit = 0;
      while (*string)
      {
         current_digit = (int)(*s - '0');
         sum += current_digit *(current_digit <= 9 && current_digit >0);
         ++s;
      }
      *result = sum;
     return TRUE;
    }
    
    Ovviamente ci sono delle vistose imperfezioni e ho omesso volontariamente gli header.La soluzione vale se,come ho capito, si contemplano solo numeri unsigned e compresi tra 0 e 9 e se è richiesto fare la somma tra le cifre trovate.
Devi accedere o registrarti per scrivere nel forum
4 risposte