Ejercicio desarrollado en C#:
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ésQue esto quede para la posteridad
. Lamento el desorden; no separe el codigo por clases ni nada de eso, ya me acostumbre asi xD Sin embargo trato de explicar en comentarios lo que hace cada cosa... bueno, no del todo, pero puede que asi resulte mas amigable el codigo.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public void desarma_palabras(){
//decalaracion de variables
int fin, count = 0, inicio = 0;
char aux;
Double cuenta_vocales = 0;
String palabra = "", vocales = "AÁaáEÉeéIÍiíOÓoóUÚÜuúü", cadena= "", con_piso = "", con_regex;
//lectura
Console.WriteLine("Ingrese un texto cualquiera");
Console.WriteLine();
palabra = Console.ReadLine();
char[] matriz = new char[palabra.Length];
List<String> lista = new List<String>();
//validar que no se ingrese una cadena de texto una o con espacios en blanco
while (string.IsNullOrWhiteSpace(palabra)){
Console.WriteLine("Por favor ingrese por lo menos una palabra: ");
palabra = Console.ReadLine();
}
count++; //si sale del bucle es porque minimamente hay una palabra
palabra = palabra.Trim(); //Elimina los espacios en blanco ubicados al comienzo y al final del texto ingresado
fin = palabra.Length - 1;
con_regex = Regex.Replace(palabra, "[^a-zA-Z0-9á-úÁ-Úü]+", "", RegexOptions.Compiled); //este metodo elimina todo lo que no sean letras o numeros, o lo que no se especifique en el rango. Esto para saber con cuantas letras y numeros contamos
//Este bucle recorre "palabra"
for (int i = 0; i < palabra.Length; i++){
//Este pequeño bloque de codigo voltea el texto ingresado y lo almacena en cadena
aux = palabra[inicio];
matriz[inicio] = palabra[fin];
matriz[fin] = aux;
inicio++;
fin--;
cadena = cadena + Convert.ToString(matriz[i]);
//este bucle recorre las vocales que hay en la cadena "vocales", precisamente
for (int j = 0; j < vocales.Length; j++)
{
if (palabra[i] == vocales[j])
{
cuenta_vocales++;
lista.Add(Convert.ToString(palabra[i]));
}
}
}
//volvemos a recorrer "palabra"
for (int i = 0; i < palabra.Length; i++){
//almacena cada digito de "palabra"
char a = palabra[i];
//si hay un espacio en blanco...
if (a == ' ')
{
//recorremos el siguiente caracter
for (int j = i + 1; j < i + 2; j++)
{
//Si el siguiente caracter es diferente de lo que hay en el actual caracter, o sea un espacio en blanco...
if (palabra[i] != palabra[i + 1])
{
//...el contador de palabras aumenta
count++;
}
}
}
}
Console.WriteLine();
//a) Calcular el porcentaje de vocales presentes en el texto
double porciento_vocales = (cuenta_vocales * 100) / palabra.Length;
Console.WriteLine(" a) El porcentaje de vocales corresponde a un: " + Math.Round(porciento_vocales, 2) + " %");
//b) Contar cantidad de palabras en el texto
if (count == 1)
{
Console.WriteLine(" b) Hay solo un palabra");
}
else{
Console.WriteLine(" b) La cantidad de palabras que hay en el texto es: " + count);
}
//c) Verificar el porcentaje de dígitos y de letras que existen en el texto
double tamaño_regex = con_regex.Length;
double porciento_digito_letra = ((tamaño_regex * 100) / palabra.Length); //"Tamaño_regex", como mencione antes, almacena solo letras y numeros, por tanto lleva su cuenta. Todo sobre la cantidad de digitos en total
Console.WriteLine(" c) El porcentaje de digitos/letras que hay en el texto es: " + Math.Round(porciento_digito_letra, 2) + " %");
//d) Eliminar todos los espacios y sustituirlos por "_"
con_piso = palabra.Replace(" ", "_");
Console.WriteLine(" d) El texto con piso queda: " + con_piso);
//e) Imprimir el texto al reves
Console.Write(" e) El texto al reves queda: " + cadena);
}