programa q cuenta cuantas palabras tienen 4 letras y termina de leer un arreglo

Iniciado por masterkeyes, 20 Agosto 2015, 18:22 PM

0 Miembros y 1 Visitante están viendo este tema.

masterkeyes

Código (cpp) [Seleccionar]
#include<stdio.h>
#include<string.h>
void main()
{
char cadena[90];
int i;
int contador=0;
int cont=0;
printf("ingrese la cadena\n");
gets(cadena);
for(i=0;i<(strlen(cadena));i++)
{
if(cadena[i]=='.')
{
cadena[i]='\0';
}
if(cadena[i]!=' ')
{
contador++;
if(contador==4)
{
cont++;
if(contador==4)
{
contador=0;
}

}
}

}
printf ("\n%s", cadena);
printf("\n palabras con 4 letras son =[%d]",cont);
printf("\n");

porfin pude



Mod: Los códigos deben ir en etiquetas GeSHi

DarK_FirefoX

Una sugerencia, en el ciclo tienes:

for(i=0;i<(strlen(cadena));i++)
{
   /*...*/
}


Lo cual significa que estás calculando el tamaño de cadena utilizando strlen() en cada iteración del ciclo.

Mi sugerencia es antes del ciclo crear una variable donde calcules el tamaño de cadena y esa utilizarla en el ciclo ¿Entiendes? Vaya, por cuestiones de eficiencia temporal. Puede que no se vea en este código, pero es bueno tenerlo en cuenta.

/*...*/
int sizeCadena = strlen(cadena);
for(i=0; i < sizeCadena; i++)
{
   /*...*/
}


Salu2s

Añado:

PD: No revisé si el código funciona y no tiene errores en tiempo de ejecución o si el resultado es el correcto, solo quise señalar lo anterior

furciorifa

El uso de gets ya esta deprecado en C lee acerca de los peligros que conlleva utilizar esa función, mejor utiliza fgets(cadena,90,stdin);


geeke

Yo lo haría mas o menos así

Código (cpp) [Seleccionar]
#include <string.h>
#include <stdio.h>

int main(void)
{
    char str[64];
    int pos = 0, i, cant = 0;

    char *r = fgets(str, sizeof(str), stdin);
    char len = strlen(str);

    if(r != NULL && str[len - 1] == '\n')
       str[len - 1] = '\0';

    for (i = 0; str[i] != '\0'; i += pos + 1)
        if(((pos = strcspn( str + i, " " )) == 4))
            cant++;

    printf("Palabras con 4 letras son: %d\n", cant);

    return 0;
}