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;
}
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.
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.
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;
}
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.
de hecho el carácter ñ lo toma como si fueran 2. :(
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;
}
(https://image.prntscr.com/image/6gfZDLGVS2GMF4lzwb4xvQ.png)
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?
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. >_<