| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
ups!!
Registrado: 02 Sep 2007 Mensajes: 12
| Publicado: 06/09/2007 1:20 pm | | | Título: pequeño problema de string |
| hola saben necesito ayuda en este pequeño problema: 
necesito diseñar un programa que indique la cantidad de numeros que aparecen una cadena leida del teclado. ¡ojo! con numeros no queremos decir digitos, sino numeros propiamente tal, es decir, secuencial del digito. la cadena 'un 1, un 201 y un 2', por ejemplo, tiene 3 numeros : el 1, el 201 y el 2...
agradeseria su ayuda gracias  |
|
| Volver arriba | |
 |
digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 06/09/2007 3:26 pm | | | Título: |
| Hola
Una forma básica de hacerlo es este:
| Código: | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
int main(void) { char *cad= "1345 ds d6un 1da4 34"; int i=0, a=0, b=0; do { while(isdigit(cad[i])) { a=1; if(i==strlen(cad)-1) break; else i++; } b+=a; a=0; i++; } while(i<strlen(cad)); printf("Cantidad de n\xA3meros: %d\n\n\n", b); system("pause"); return 0; }
|
Obviamente este código puede ser optimizado porque hay redundancia de asignación de valores en las variables a y b. Tienes que optimizarlo.
Un saludo. |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 06/09/2007 7:30 pm | | | Título: |
| Otra aportacion.
| Código: | #include <stdio.h> #include <ctype.h>
int main() { char *p ="mi C89 elC99yFortran87"; int fl = 0, isi = 0; do { fl = isdigit(*p) ? fl + 1 : 0; if(fl == 1)isi++; } while(*p++); printf("N de cifras numericas en la cadena: %d", isi);
return 0; } |
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso.
Ultima edición por cheroky el 07/09/2007 5:09 pm; editado 2 veces |
|
| Volver arriba | |
 |
|
digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 07/09/2007 4:41 pm | | | Título: |
| cheroky lamento decirte que tu programa no arroja los resultados esperados, siempre y cuando tengamos en cuenta las directivas impuestas por ups!!.
Por ejemplo si tenemos: *p="mi C89 elC99yFortran87"; El resultado es "N de cifras numericas en la cadena: 2" y debería arrojar 3.
Un saludo. |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 07/09/2007 4:55 pm | | | Título: |
| | digies escribió: | cheroky lamento decirte que tu programa no arroja los resultados esperados, siempre y cuando tengamos en cuenta las directivas impuestas por ups!!.
Por ejemplo si tenemos: *p="mi C89 elC99yFortran87"; El resultado es "N de cifras numericas en la cadena: 2" y debería arrojar 3.
Un saludo. |
Ajám, un error en la condicion del primer if, cosas del directo ;-) Editado y arreglado.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
|
|