Autor Tema: funciones Cadenas de caracteres en C contar palabras y vocales (lenguajeC) texto  (Leído 117586 veces)

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
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.
« Última modificación: 25 de Junio 2017, 12:41 por Ogramar »

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #1 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.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2631
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #2 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



Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #3 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.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2631
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #4 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

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #5 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

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2631
    • Ver Perfil
Re:Cadena de caracteres
« Respuesta #6 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.


Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
Re:funciones Cadenas de caracteres en C
« Respuesta #7 en: 14 de Junio 2014, 20:29 »
Claro! tienes toda la razón, bueno, muchas gracias por la ayuda! ;D

Hirako

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Re:funciones Cadenas de caracteres en C contar palabras y vocales
« Respuesta #8 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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".