Ciao a tutti, ho un dubbio che non riesco a risolvere.
Ho una stringa la quale è composta da lettere numeri e simboli(es new_file6.7) dentro ad un array di char.
Io vorrei estrappolare solo la parte 6.7, sapendo che non ho una lunghezza costante ma variabile.
Quindi ho pensato di scrivere quanto segue:
In AVR libc, <string.h> ci sono tante belle funzioncine che fanno quelle operazioni in modo molto più elegante e veloce (la maggior parte sono scritte in assembler) ...
Ciao Fabpolli, no i caratteri sono più di tre, quindi direi che la soluzione di ilguargua mi va bene...provata e fuzniona ...Grazie
Guglielmo, ho letto la libreria ma forse io non sono così bravo da usare le funzioni in maniera elegante
sono più spartano
Mi fai vedere te come si può rendere il codice più elegante??
Grazie.
... in reltà stavo rispondendo a fabpolli dato che avrebbe potuto facilmente eliminare quel for per spostare i caratteri da una parte all'altra con un semplice e veloce memcpy(), inoltre, in generale, per verificare se un dato carattere è numerico, basta usare la isdigit().
Dato però che, purtroppo, non hai un numero di digit fisso (male, avresti potuto aggiungere zeri davanti per rendere il numero di lunghezza fissa), il codice di fabpolli non si può usare e quindi la soluzione di ilguargua è quella che ti va bene.
Visto comunque che parliamo di strighe classiche del 'C', che sono sempre NULL terminated, io lo avrei scritto così :
P.S.: ma la struttura almeno è sempre quella? Ovvero, una parte alfabetica davanti con attaccato un valore numerico? Perché, se è così, forse allora si può ottimizzare ancora un pochino ...
... ovvero, se si ha SEMPRE una struttura di tipo "xxxxxxxxxNNN.NN" con 'x' caratteri alfabetici e N caratteri numerici allora, sempre ricordando di dimensionare per il massimo le strigne di origine e di destinazione, la cosa si semplifica così:
Ribadisco, funziona se si ha sempre la stessa struttura, un numero non definito di caratteri alfabetici seguito da un numerico (con o senza punto decimale) e purché le due variabili siano ben dimensionate.
Si, la struttura è una parte inizale alfabetica, ed una parte (variabile) numerica divisa dal punto...la parte numerica non è sempre uguale come dimensioni...
... quello NON è importante, basta che dimensioni per la massima lunghezza la stringa ricevente (nel tuo caso "new_cartella") ... se la struttura è fissa, allora va bene il mio secondo esempio
Guglielmo, ho provato ma c'è un limite...che giustamente non avevo considerato...
Se nella cartella vi sono caratteri come _ o - si blocca e non estrae la parte numerica.
_ o - non sono considerati caratteri??
Avrò detto e ripetuto 1000 volte su questo forum di studiarsi la AVR libc (che ti ha anche indicato ilguargua) ... è piena di moduli che semplificano parecchio la vita ...