/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

pequeño problema de string

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
ups!!



Registrado: 02 Sep 2007
Mensajes: 12

MensajePublicado: 06/09/2007 1:20 pm
Título: pequeño problema de string

hola saben necesito ayuda en este pequeño problema: Surprised

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 Very Happy Very Happy Very Happy
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com