Hola a todos.
Me pase con este tema unas cuantas horas y hasta aquí llegue, espero que me puedan ayudar a resolverlo.-

En primer lugar les pongo el enunciado.
Imagen


Lo que llevo hecho es lo siguiente.

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>

int main(void){
	char tempFrase[] = "La casa de Juan es de color azul", *token, frase[32];
	int ocurrencias=0;

	strcpy(frase, tempFrase);
	
	token = strtok(tempFrase," ");
	while (token != NULL){
 		printf("\n En la direccion %p se encuentra la palabra...: %s\n", token ,token);
		(strlen(token) == 4) ? ocurrencias++ : ocurrencias;
		token = strtok(NULL," ");
 	}
	
	printf("\n La frase \"%s\" contiene %d palabras de 4 letras\n\n", frase, ocurrencias);

	return 0;
}



/*
#include <stdio.h>
#include <string.h>

#define MAX_FRASES 5
#define MAX_LONGITUD 30

void verificaIngreso(char frases[][MAX_LONGITUD], int i);

int main(void){
	char frases[MAX_FRASES][MAX_LONGITUD];
	int i=0, j=0, ocurrencias=0, com=0, fin=0;
	
	for(; i<MAX_FRASES; i++){
		printf("\n Ingrece frase[%d]...:", i+1);
		fgets(frases[i], MAX_LONGITUD, stdin);
		verificaIngreso(frases, i);
	}

	for(i=0; i<MAX_FRASES; i++){
		printf("\n La frase[%d] tiene una longitud de %d caracteres", i+1,  strlen(frases[i]));
	}
	
	for(i=0; i<MAX_FRASES; i++){
		for(j=0; frases[i][j]; j++){
			if(frases[i][j] == 32)
				com = frases[j]
				
			}
	}

	printf("\n %d", espacios);
	printf("\n\n");
	return 0;
}

void verificaIngreso(char frases[][MAX_LONGITUD], int i){
	char *p=NULL;
	unsigned int ch=0;

	if((p=strchr(frases[i], '\n'))!=0){
		*p='\0';
	}
	else{
		while((ch = getchar()) !='\n' && ch!=EOF);
	}

}*/
Lo que no puedo saber es ¿Qué referencia debo utilizar para acceder a la variable frase y sustituir todas las palabras de 4 letras por asteriscos ?.-

Saludos y desde ya muchas gracias por el tiempo.-
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
no es muy dificil. solo tienes que recorrer la cadena si consigues 4 caracteres antes del espacio retrocedes 4 y rellenas. y continuas +4 otra vez.

saludos
Imagen
Hola Bruder.
Sólo una cosita más ¿Cómo hacer cuando la palabra es la primera o la última? En estos casos no tengo espacios en ambos lados.-

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>

int main(void){
	char s1[] = "Hola juan que tengas un buen dia";
	int i=0, j=0, longitud=strlen(s1);

	for(; i<longitud; i++){
		if(s1[i] == ' ' && s1[i-5] == ' '){
			for(j=i-4; j<i; j++){
				s1[j] = '*';
			}
		}
	}
	printf("%s", s1);

	printf("\n\n");
	return 0;
}
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Algo burdo seria así:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char cadena[100]="hola Pino1952 como estas? Soy Pink. pero tambien Daniel o Dany chao :)";
    int i=0;
    int count=0;
    int ilen=0;

printf("cadena 1: %s\n",cadena);
    ilen=strlen(cadena);

    for (i=0; i<=ilen; i++ )
    {
        if (cadena[i]==32 || i==ilen)
        {
            if (i==26)
            {
            count++;i++;
            }
            if (count==4)
            {
                cadena[i-count]='*';
                cadena[i-count+1]='*';
                cadena[i-count+2]='*';
                cadena[i-count+3]='*';
            }
            count=0;
        }
        else
        {
            count++;
        }
    } ;
    printf("cadena 2: %s\n",cadena);

    return 0;
}
Saludos
Imagen
Hola Bruder.
Ok funciona a la perfección, solo un error de principiante pero es entendible
De cualquier manera voy a practicar para hacer que funcione el código mío.-

Un gran abrazo.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Yo tiraria de strtok() para splitear y luego validaria tal que asi.
Imagen


No tego internet asi que tuve que sacar foto con el tlfno y subirla, disculpad la calidad jajaajaja
Acabo de descubrir que puedo compartir los datos (3g) con mi PC, a modo de modem vaya. (facepalm)
aqui en claro:
#include <string.h>
#include <stdio.h>

int main(){
	char cadena[100] = "Yo lo haria de esta forma porque me parece mas sencillo jeje";
	char *result;
	
	//take first token
	result = strtok(cadena, " ");
	if (strlen(result) == 4){
		printf("<<%s>> contiene <<%i>> caracteres\n", result, strlen(result));
	}
	
	while((result = strtok(NULL, " ")) != NULL)
		if (strlen(result) == 4){
			printf("<<%s>> contiene <<%i>> caracteres\n", result, strlen(result));
		}
	
	return 0;
}
y luego ya solo queda dar replace, psandolo a una nueva variable o como tu veas vaya
Hola Bruder.
Con tú código me parece que si la última palabra es de 4 letras y no tiene un espacio al final no la sustituye.-
Pongo mi código que al fin funciona.-

Código: Seleccionar todo

#include <stdio.h>
     
int main(void){
	char s1[] = "hola Daniel como estas? Soy Pino1952 pero tambien Daniel o Dany chao";
	int i=0, cont=0, cant=0;
     
	printf("\n cadena original....: %s\n", s1);
	for(; s1[i]; i++){
		cont++;
		if(s1[i] == ' '){
			if(cont==5){
				for(cont=i-4; cont <i; cont++){
					s1[cont] = '*';
				}
				cant++;
			}
			cont=0;
		}
	}

	if(cont==4){
		for(cont=i-4; cont <i; cont++){
			s1[cont] = '*';
		}
		cant++;
	}
     
 	printf("\n Cadena reemplazada.: %s\n", s1);
	printf("\n Se han sustituido un total de %d palabras.\n\n", cant);
     
	return 0;
}
Hola Sanko, me interesa de sobremanera tu manera de hacerlo, pero como lo dije al principio, como hago para reemplazar las palabras por asteriscos, ¿Qué debo usar como referencia?.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
http://www.indetectables.net/viewtopic.php?f=37&t=50995
¿No les parece que por lo menos deberían mandar un correo cuando se toma este tipo de determinaciones?.-
Desde ya me doy por despedido de este foro, confiaba mucho en el mismo y más en mí caso que soy un autodidacta de 62 años.-
Hermano Daniel un fuerte abrazo y muchas gracias por lo que me enseñaste.-
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Pino1952 escribió:http://www.indetectables.net/viewtopic.php?f=37&t=50995
¿No les parece que por lo menos deberían mandar un correo cuando se toma este tipo de determinaciones?.-
Desde ya me doy por despedido de este foro, confiaba mucho en el mismo y más en mí caso que soy un autodidacta de 62 años.-
Hermano Daniel un fuerte abrazo y muchas gracias por lo que me enseñaste.-
Es que en ese post se hace una pregunta que no tiene nada que ver con la tematica del foro, es obvio el por que te lo mandaron a papelera, salu2
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Responder

Volver a “C/C++”