elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Ejercicio simple
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Ejercicio simple  (Leído 2,827 veces)
Cracky7

Desconectado Desconectado

Mensajes: 22


Ver Perfil
[Ayuda] Ejercicio simple
« en: 12 Febrero 2012, 15:39 pm »

Mi enunciado es:
Citar
Crear una función que reciba una cadena y una letra, y devuelva la cantidad de veces
que dicha letra aparece en la cadena.

Y hasta ahora tengo:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int numeroVeces(char c, char cadena[80])
  5. {
  6.  int i=0, b=0;
  7.  
  8.  for (i=0; i<strlen(cadena); i++)
  9.    {
  10.      if (strcmp(c, cadena[i]) == 0)
  11.        b++;
  12.    }
  13.  
  14.  return b;
  15. }
  16.  
  17. int main()
  18. {
  19.  char a;
  20.  char linea[80];
  21.  
  22.  printf("Introduce la letra a buscar: ");
  23.  a = getchar();
  24.  getchar();
  25.  printf("Introduce la cadena donde buscarla: ");
  26.  gets(linea);
  27.  printf("%d", numeroVeces(a, linea));
  28.  
  29.  return 0;
  30. }
  31.  

Por más que lo intento, se cierra siempre después de introducir mi cadena, y el debugger dice que el problema está en la línea:
Código
  1.  printf("%d", numeroVeces(a, linea));


En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: [Ayuda] Ejercicio simple
« Respuesta #1 en: 12 Febrero 2012, 16:10 pm »

Claro porque estás intentando pasar una cadena por valor. Las matrices/tablas/vectores/cadenas (son lo mismo) no pueden pasarse a una función directamente, es como si intentaras hacer esto:

Código
  1. tabla1 = tabla2;

No se puede asignar una tabla a otra sino que hay que hacerlo elemento a elemento. Para pasar una tabla a una función debes usar paso por referencia.

Saludos.


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: [Ayuda] Ejercicio simple
« Respuesta #2 en: 12 Febrero 2012, 16:54 pm »

Hola! todos las cadenas pasan por referencia ya que el el nombre de una cadena es un puntero al inicio del arreglo.

El error esta en strcmp. Esta funcion recibe dos punteros a char (char *) y vos le estas pasando como primer argumento un char. Para contar las veces que aparece la letra solo basta con poner
if (c==cadena))
        b++;
En línea

Ahorrate una pregunta, lee el man
Cracky7

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: [Ayuda] Ejercicio simple
« Respuesta #3 en: 12 Febrero 2012, 20:27 pm »

Vaya, hombre.
Eso lo tenía puesto antes, lo cambié por strcmp y, como seguía sin funcionar, no lo volví a poner. Algo debo de haber cambiado y no me acuerdo qué.

De todas maneras ya funciona. ¡Gracias, durasno!
En línea

Anastacio

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: [Ayuda] Ejercicio simple
« Respuesta #4 en: 15 Febrero 2012, 20:09 pm »

A que te refieres con elemento por elemento???
En línea

You, stop to close my post, you were novice too!!!!!!!!!!!!
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: [Ayuda] Ejercicio simple
« Respuesta #5 en: 15 Febrero 2012, 20:29 pm »

No debiese ser:
Código
  1. if (c==cadena[i]))
  2.        b++;
??
Ademas es redundante hacer esto:
Código
  1. //le das valor a i
  2. int i=0
y luego
Código
  1. //le vuelves a dar valor a i ????
  2. for (i=0; i<strlen(cadena); i++)
Tal vez esto podria resultar...
Código
  1. int numeroVeces(char c, char cadena[80])
  2. {
  3.  int i, b=0;
  4.  
  5.  for (i=0; i<strlen(cadena); i++)
  6.    {
  7.      if (c==cadena[i]) //tambien puede ser if (strcmp((char *)c, cadena[i]) == 0)
  8.        b++;
  9.    }
  10.  
  11.  return b;
  12. }

Saludos
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [Ayuda] Ejercicio simple
« Respuesta #6 en: 16 Febrero 2012, 01:17 am »

Dos detalles a considerar ...

El primero es solo para reducción del código fuente. Ya que se deben verificar cada uno de los caracteres de la cadena no es necesario el uso de la función "strlen", basta con verificar si el carácter es el indicador del final de la cadena (el '\0'):
Código
  1. int i, b = 0;
  2.  
  3. for (i = 0; cadena[i] != '\0'; i++)
  4.   if (cadena[i] == c)
  5.      b++;

El segundo es un error en el comentario:
Código
  1. if (c==cadena[i]) //tambien puede ser if (strcmp((char *)c, cadena[i]) == 0)
Eso no funcionara ya que el valor almacenado en la variable "c" se tomaría como una dirección en memoria, tampoco vale como segundo argumento "cadena[ i ]" ya que es un carácter.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Explicacion de un simple ejercicio
Java
camaleon123 1 2,847 Último mensaje 6 Enero 2010, 06:07 am
por Leyer
Ayuda con C++, Ejercicio Simple [Soy Novato]
Programación C/C++
xmbeat92 3 5,021 Último mensaje 1 Octubre 2010, 07:47 am
por xmbeat92
Un ayuda con un ejercicio muy simple de python pero que no...
Programación General
AlexKurban 1 1,916 Último mensaje 7 Noviembre 2013, 18:33 pm
por AlexKurban
Ejercicio simple estructuras
Programación C/C++
Ja_90 4 2,446 Último mensaje 13 Octubre 2014, 20:33 pm
por Ja_90
Ejercicio simple de C++
Programación C/C++
sjav96 0 1,308 Último mensaje 20 Marzo 2016, 19:27 pm
por sjav96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines