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
-
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:
#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.
-
ya pude resolver la A , B y D, la B la hice de esta manera:
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.
-
hola, comprueba que sea el último espacio si se trata de varios espacios.
Para ello puedes usar:
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
-
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.
-
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
-
Aquí esta el código como lo tengo ahora:
#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
-
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
//-------------------------------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.
-
Claro! tienes toda la razón, bueno, muchas gracias por la ayuda! ;D
-
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