Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Hyde en 11 de Junio 2014, 03:16

Título: funciones Cadenas de caracteres en C contar palabras y vocales (lenguajeC) texto
Publicado por: Hyde en 11 de Junio 2014, 03:16
Buenas, estoy practicando con cadenas pero me tranqué en esto:

Dado un texto de hasta 300 caracteres, desarrollar lo siguiente

a) Calcular el porcentaje de vocales presentes en el texto
b) Contar cantidad de palabras en el texto
c) Verificar el porcentaje de dígitos y de letras que existen en el texto
d) Eliminar todos los espacios y sustituirlos por "_"
e) Imprimir el texto al revés

Bueno, lo único que he logrado hacer es lo siguiente:

- contar las vocales
- contar los caracteres

PERO necesito es el porcentaje de vocales, se supondría que seria (Numerodevocales *100) /TotalCaracteres si no me equivoco.
El problema que tengo es el siguiente: cuando cuento el numero de caracteres, me cuenta también los espacios (utilizando el strlen ), cosa que no quiero para poder sacar bien el porcentaje, dejo el código que he hecho:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <string.h>

int contar_vocales(char *);


int main(){
     
char cad[300];
int longi;
float porc;

printf("Ingrese el texto a contar vocales : ");
gets(cad);
longi = strlen(cad);
printf("La cantidad de Vocales: %d",contar_vocales(cad));
printf("\nCantidad de caracteres: %d",longi);
getch();


}

//-- Funcion:
       
int contar_vocales(char *cad){
   
int cont=0;
char *aux=cad; 
 
 while(*aux){     
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;               
   }//función
   

return cont;

}//contar_vocales

me gustaría que me ayuden con lo demás también que no tengo idea de como hacerlo (ya lo he pensado bastante, pero no he dado con eso :/), un saludo y muchas gracias.
Título: Re:Cadena de caracteres
Publicado por: Hyde en 11 de Junio 2014, 05:52
ya pude resolver la A , B y D, la B la hice de esta manera:

Código: [Seleccionar]
P=0;
for(x=0;x<500;x++){
 if(cad[x]==' ')
  P++;
}
printf("\nCantidad de Palabras: %d",P+1);

para que me cuentelas palabras, pero hay un problema, porque si yo undo varias veces el espacio seguido, me contara palabras, como resuelvo eso? grcias.
Título: Re:Cadena de caracteres
Publicado por: Ogramar en 11 de Junio 2014, 12:51
hola, comprueba que sea el último espacio si se trata de varios espacios.

Para ello puedes usar:

Código: [Seleccionar]
if(cad[x]==' ' && x!=499 && cad[x+1]!=' ')

Se trataría de comprobar:

- Que no estés en la última letra, si es así no habría que contar palabra
- Que después de ese espacio no venga otro espacio, si es así no habría que contar palabra


Título: Re:Cadena de caracteres
Publicado por: Hyde en 12 de Junio 2014, 03:49
Bueno probé cambiando la condición, pero no funciono, al introducir espacios, me sale que hay un numero determinado de palabras cosa que no es cierta, el programa funciona como debe ser cuando no hay espacios de màs, pongo "hola hola", y me cuenta como dos palabras gracias a la P+1, pero al introducir muchos espacios, me cuenta palabras inexistentes.

Al igual cuando pongo "hola hola           "(con espacios a la derecha) me cuenta palabras que no existen, cosa que pasa por la lógica que le aplique para contar las palabras, pero no se de que forma evitar este error del programa.
Título: Re:Cadena de caracteres
Publicado por: Ogramar en 12 de Junio 2014, 10:48
Has indicado que cambiaste el código, pega el código tal y como lo tengas ahora para poder revisarlo a ver si encuentro el problema, saludos
Título: Re:Cadena de caracteres
Publicado por: Hyde en 13 de Junio 2014, 01:17
Aquí esta el código como lo tengo ahora:

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

int contar_vocales(char *);

int main(){   
char cad[500],*p;
int longi,i,x,P,R,V,longinP,len,NumeroAleatorio;
int porc=0;

printf("Ingrese un texto: ");
gets(cad);
longi = strlen(cad);


//-------------------------------Contador palabras------------------------------
P=0;
for(x=0;x<500;x++){
 if(cad[x]==' ' && x!=499 && cad[x+1]!= ' ')
  P++;
}
printf("\nCantidad de Palabras: %d",P+1);

//--------------------------------Porcentaje------------------------------------

printf("\nCantidad de Vocales: %d",contar_vocales(cad));
V = contar_vocales(cad);
printf("\nCantidad de caracteres: %d",longi-P);
longinP= longi-P;
porc= (V*100)/longinP;
printf("\nPorcentaje de vocales: %d Por ciento",porc);

//---------------------------------- Al reves-----------------------------------
len = strlen(cad);
printf("\nTexto al reves: ");
i=0;
for(i=len;i>=0;i--){
     printf("%c",cad[i]);         
 }
printf("\n");

//--------------------------------------Piso------------------------------------
p=cad;
while(*p!='\0'){
if(*p==' ')
        *p='_';
p++;
}
printf( "Con piso: %s \n",cad);

getch();
}//Main -CuerpoPrincipal-

//--------------------------------Funcion---------------------------------------
       
int contar_vocales(char *cad){
   
int cont=0;
char *aux=cad;
 
while(*aux){
   if(*aux=='a'||*aux=='e'||*aux=='i'||*aux=='o'||*aux=='u')
     cont++;
       aux++;               
   }//funcion
   
return cont;

}//contar_vocales
Título: Re:Cadena de caracteres
Publicado por: Ogramar en 13 de Junio 2014, 18:34
A mí simplemente cambiando el for para que en vez de buscar palabras hasta el final del array busque hasta la longitud válida parece que me funciona bien

Código: [Seleccionar]
//-------------------------------Contador palabras------------------------------
P=0;
for(x=0;x<longi;x++){ //Aquí no debes recorrer hasta 500 sino hasta longitud de cadena
 if(cad[x]==' ' && x!=499 && cad[x+1]!= ' '){
  P++;
  }
}
printf("\nCantidad de Palabras: %d",P+1);

Por ejemplo:

Ingrese un texto: no es cosa de dos

Cantidad de Palabras: 5
Cantidad de Vocales: 6
Cantidad de caracteres: 13
Porcentaje de vocales: 46 Por ciento
Texto al reves:  sod ed asoc se on
Con piso: no_es_cosa_de_dos

Esto parece que está todo correcto.

Título: Re:funciones Cadenas de caracteres en C
Publicado por: Hyde en 14 de Junio 2014, 20:29
Claro! tienes toda la razón, bueno, muchas gracias por la ayuda! ;D
Título: Re:funciones Cadenas de caracteres en C contar palabras y vocales
Publicado por: Hirako en 05 de Abril 2016, 17:24
no esta correcto porque si le pones un espacio a lo ultimo de la palabra te lo contara como una palabra mas que no hay :D saludos xd