... 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ì
:
void setup() {
char cartella[] = "abcdefghi123.45";
char new_cartella[7];
byte i, j;
//
delay ( 500 );
Serial.begin ( 115200 );
//
i = 0;
j = 0;
while ( cartella[i] != 0x00 ) {
if ( isdigit ( cartella[i] ) || cartella[i] == '.' ) {
new_cartella[j] = cartella[i];
j++;
}
i++;
}
new_cartella[j] = 0x00;
//
Serial.print ( F ( "Valore estratto = " ) );
Serial.println ( new_cartella );
}
void loop() {
}
Guglielmo
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 ... ![]()