Contar letras en cualquier oración

Iniciado por erickcasita, 4 Enero 2018, 18:21 PM

0 Miembros y 1 Visitante están viendo este tema.

erickcasita


Hola, he estado haciendo este ejercicio para contar las letras de una frase, al parecer funciona bien pero necesito saber que más agregarle o si me falta algo...
Muchas gracias




#include <stdio.h>
#include <string.h>
int main() {
char nomb[100];
int let, cont = 1;
printf("Ingrese una frase\n");
fflush(stdin);
fgets(nomb, 100, stdin); //saco la longitud original
let = strlen(nomb);

for (int i = 0; i < let; i++) {

if (nomb[i] == ' ') {

cont++; //cuento los espacios en blanco

}
}
let = let - cont; // al final simplemente lo resto a la longitud original.
printf("\n La frase tiene  %d palabras", let);

return 0;
}

"Nadie nace sabiendo, Todos aprendemos y seguimos aprendiendo."

fary

Está bien, aunque lo puedes remusir un poco  :)

#include <stdio.h>

int main()
{
char nomb[100];
int i, a = -1;

printf("Introduce tu frase: ");
   fflush(stdin);
fgets(nomb, 100, stdin);

for (i = 0; nomb[i] != '\0'; i++)
   {
       if (nomb[i] != ' ') a++;
   }

   printf("Hay %i letras.\n", a);
   
return 0;
}


saludos.
Un byte a la izquierda.

MAFUS

Te recomiendo la librería ctype.h. Tiene funciones para discriminar letras, números, caracteres imprimibles, etc.
Tú programa solo busca espacios; una tabulación, signos o números serán cobrados como letras.

erickcasita

Me puse a investigar un poco sobre la librería cytpe.h  y logre hacer esto espero quede correcto:
saludos cordiales



#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char nomb[100];
int let, cont, contsig, contespa;
int suma, rptaletra;
printf("Ingrese una frase\n");
fflush(stdin);
fgets(nomb, 100, stdin);
let = strlen(nomb);//saco la longitud original

for (int i = 0; i < let; i++) {

if (isdigit(nomb[i])) {

cont++; //cuento los numeros
}
if (ispunct(nomb[i])) {

contsig++; //cuento los signos etc..

}
if (isspace(nomb[i])) {

contespa++; //cuento los espacios etc..
}
suma = cont + contsig + contespa; / sumo los contadores
}

rptaletra = let - suma; // al final simplemente lo resto a la longitud original.
printf("\n La frase tiene  %d letras", rptaletra);

return 0;
}


"Nadie nace sabiendo, Todos aprendemos y seguimos aprendiendo."

MAFUS

No hace falta que sean contadores diferentes, puedes seguir incrementando el mismo. También tienes isalpha que discrimina letras, pero ahora no sé si con el correspondiente locales en español también le entran acentos y eñes.

erickcasita

de hecho  el carácter ñ lo toma como si fueran 2.  :(
"Nadie nace sabiendo, Todos aprendemos y seguimos aprendiendo."

vangodp

Cita de: erickcasita en  5 Enero 2018, 04:19 AM
de hecho  el carácter ñ lo toma como si fueran 2.  :(
En windows sale bien:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
int main() {
//setlocale(LC_ALL, "");
int let=0, cont=0, contsig=0, contespa=0;
int suma=0, rptaletra=0, i;
char nomb[100];

scanf("%99[^\n]%*c", nomb);
let = strlen(nomb);

for (i = 0; i < let; i++) {
if (isdigit(nomb[i])) {

cont++; //cuento los numeros
}
if (ispunct(nomb[i])) {

contsig++; //cuento los signos etc..

}
if (isspace(nomb[i])) {

contespa++; //cuento los espacios etc..
}
suma = cont + contsig + contespa; // sumo los contadores
}
rptaletra = let - suma; // al final simplemente lo resto a la longitud original.
printf("\n La frase tiene  %d letras", rptaletra);
return 0;
}


erickcasita

Estuve leyendo algo sobre locale.h pero no entiendo muy bien.  Aquí el linux sigue contado el carácter "ñ" y los acentos como 2 carácteres. ¿qué podría estar pasando?
"Nadie nace sabiendo, Todos aprendemos y seguimos aprendiendo."

vangodp

Puede ser el codepage de la terminal. Puede que esté seteada como unicode o utf. Debe haber algo como una función que te diga el codepage actual, y otra para modificar, pero realmente no estoy muy seguro de nada ya que no sé mucho sobre linux. Pero sé que em algunas paginas de código los acentos son contados como una letra más, o sea, 'ñ' seria contado como 2 letras, el '~'  más 'n'. En todo caso aguarde alguien que tenga algo más de luces mejor que yo. >_<