#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
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
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);
Si ingresas "hola que tal" sale 2. :silbar:
Yo lo haría mas o menos así
#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;
}