PDA

View Full Version : [C] Estrazione elemento di una stringa


r3d87
16-10-2008, 12:30
Ciao a tutti, ho iniziato a programmare in c da poco e vorrei sapere, visto che nn ho trovato spiegazioni utili, se esiste un comando che data una stringa di X elementi controlli se ogni elemento è di tipo int o float.
Ho provato con isdigit() ma questa funzione prende in input un solo carattere e nn una stringa.
Vi faccio un esempio:

input: stringa[5]= oggi ho pescato 700,3 pesci [:sofico: ]

esiste una funzione che mi restituisca 700,3 ??

tnx


edit:
credo di aver trovato qualcosa di simile ossia la funzione isNumeric che prende in input una stringa e restituisce true se è composta da soli numeri, false altrimenti... il problema è che nn appartiene al ling c

p.s. l'edit è per specificare meglio quello che mi servirebbe :help:



edit2:
avrei pensato ad un ciclo di questo tipo ma mi da errore per atoi...



gets(string);

for(i=0;i=strlen(string);i++){
if(isdigit(string[i])){
intPtr.quantit[x]=atoi(string[i]); \\intPtr.quantit[x] è un elemto di una struttura su cui andrei a salvare il num\\
x++;
}

shainer_dev
17-10-2008, 23:03
Per quanto ne so io, una funzione apposta non esiste nella libreria standard del C. Nel codice che hai messo tu, la atoi ti restituisce errore per un semplice motivo: se guardi il prototipo è
int atoi (const char *);
quindi vuole una stringa, mentre tu come argomento gli passi string[i] che è un carattere.

Intanto un paio di note:
1) gets è insicura per prendere in input le stringhe e ormai sconsigliata, è preferibile usare la scanf.
2) se tu metti la strlen all'interno della condizione del ciclo for, essa sarà eseguita ogni volta che ripeti il ciclo. Per ogni carattere della stringa viene chiamata la strlen, a questo punto a livello di prestazione ti conviene creare una variabile size_t in cui metti il valore di ritorno di strlen, e usi quella nella condizione del for.

Comunque per risolvere dovresti spiegare meglio cosa vuoi fare: ad esempio, c'è un solo numero per stringa, oppure possono essercene quanti vuoi?

shainer

cionci
18-10-2008, 00:21
Intanto un paio di note:
1) gets è insicura per prendere in input le stringhe e ormai sconsigliata, è preferibile usare la scanf.
scanf dovrebbe soffrire degli stessi problemi della gets, semmai fgets che può limitare il numero di elementi letti.

r3d87
18-10-2008, 12:08
grazie per i consigli ma ho già risolto, ho usato gets() e strtok x dividerla in token con atoi li ho conv in int e ho verificato se erano int con isdigit e tutto funza bene^^

by