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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 49
291  Programación / Programación C/C++ / Re: Ayuda con el uso de malloc en char (C) en: 2 Julio 2012, 20:50 pm
No sé si te he entendido bien... ¿Lo que quieres es saber cómo reservar memoria dinámica en variables de tipo char?
292  Programación / Programación C/C++ / Re: contar letras de un texto en: 2 Julio 2012, 20:23 pm
Inténtalo, y te ayudamos a partir de lo que pongas  :)
293  Programación / Programación C/C++ / Re: contar letras de un texto en: 2 Julio 2012, 19:21 pm
¿Has probado con esto que dije?

Citar
A mí se me ocurre lo siguiente:

Podrías crear una cadena auxiliar, en la que copiaras el contenido de la cadena de caracteres que quieres contar el número de veces que aparece cada letra.

Con un bucle for anidado, vas comprobando el primer carácter con todos los demás de la cadena, y en caso de coincidir, aumentas el el contador de dicha letra en uno. Además, si coinciden, sustituyes en la cadena auxiliar dicho carácter por un espacio, para que cuando el bucle for llegue a dicho carácter no tengas que contar letras.

Espero haberme expresado bien...

Saludos.

Sino, te lo intento explicar mejor.

Saludos.
294  Programación / Programación C/C++ / Re: Ahorcado con ficheros en: 2 Julio 2012, 19:16 pm
Ya lo he solucionado.

Era antes de entrar al bucle en el que se paraba el programa, al reservar memoria dinámica. Ahora he puesto:

Código
  1. M = (char**)malloc(num * sizeof(char*)); //Inicializamos filas
  2.     for(i = 0; i < num+1; i++) M[i] = (char*)malloc(c * sizeof(char)); //Inicializamos columnas
  3.  

Saludos y gracias.
295  Programación / Programación C/C++ / Re: Ahorcado con ficheros en: 2 Julio 2012, 18:47 pm
Pero el problema es que entra en el bucle y por alguna razón se para en algún momento. De todas formas, esa condición la he puesto en varios ejercicios y ha funcionado.

Saludos.
296  Programación / Programación C/C++ / Re: Ahorcado con ficheros en: 2 Julio 2012, 18:31 pm
He hecho bastantes ejercicios en los que pongo esa condición:

Código
  1. while((feof(fp)==0) && (c=fgetc(fp)))

En la primera de las condiciones, comparo el resultado que me da la función feof() con 0, por lo que van dos iguales. En lo segundo, asigno un valor al carácter c (que se puede poner también dentro de un bucle while, pero aunque lo sacara y lo pusiera dentro de las llaves del while, no funciona de todas maneras), por lo que va un solo igual..

Gracias de todas formas.

Saludos.
297  Programación / Programación C/C++ / Re: [Duda C] Como añadir variable a la función system() en: 2 Julio 2012, 18:27 pm
EDITO 2:

Sí, al final creo que estaba bien lo que dije antes.

Daniyo, en strcat(), el segundo parámetro debe ser una cadena de caracteres (char*), no un solo carácter(char), ya que el prototipo es:

char *strcat(char*s1, const char *s2);

Para solucionarlo puedes obtener la longitud de la primera cadena con strlen() y meter el carácter que quieras en esa posición.

Saludos.
298  Programación / Programación C/C++ / Ahorcado con ficheros en: 2 Julio 2012, 18:14 pm
Hola.

Estoy haciendo el juego del ahorcado.

He creado un fichero "prueba.dat", en el que meto palabras separadas por un espacio. Quiero obtener una palabra aleatoria de entre las que tengo.

Todavía no tengo la parte de obtener la palabra aleatoria, pero eso creo que sé hacerlo. El problema es que quiero meter las palabras antes en una matriz.

El programa compila, pero en un momento determinado (que tengo señalado en el programa) deja de funcionar y dice "Ahorcado.exe dejó de funcionar. Windows está buscando la solución al problema"...


Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int NumeroEspaciosBlancos(FILE *fp);
  5. void CogerPalabras(FILE *fp, int num);
  6.  
  7. int main(){
  8.  
  9. FILE *fp;
  10. int num;
  11.  
  12. fp=fopen("prueba.dat", "r");
  13.  
  14.    num=NumeroEspaciosBlancos(fp);
  15.  
  16.    CogerPalabras(fp,num);
  17.  
  18.    fclose(fp);
  19.  
  20. system("pause");
  21.  
  22. }
  23.  
  24. int NumeroEspaciosBlancos(FILE *fp){
  25.  
  26.  char c;
  27.  int i=0 ;
  28.  
  29.  while(feof(fp)==0){
  30.  
  31.  c=fgetc(fp);
  32.  
  33.  if(c==' ') i++;
  34.  
  35.  }
  36.    rewind(fp);
  37.    return i;
  38.  
  39. }
  40.  
  41. void CogerPalabras(FILE *fp, int num){ //num es el número de espacios que tiene el fichero
  42.  
  43.     char **M;
  44.     char c;
  45.     int i=0,j=0;
  46.  
  47.     M=(char**)malloc((num+1)*sizeof(char*));
  48.  
  49.     for(j=0;j<num+1;j++){
  50.  
  51.  
  52.       M[j]=(char*)malloc(20*sizeof(char));
  53.  
  54.       j++;
  55.  
  56.  
  57.     }
  58.  
  59.  
  60.     i=0;
  61.     j=0;
  62.  
  63.     while((feof(fp)==0) && (c=fgetc(fp))){  //EN ESTE BUCLE DEJA DE FUNCIONAR EL PROGRAMA
  64.  
  65.     if(c!=' '){
  66.     M[i][j]=c;
  67.     j++;
  68.  
  69.  
  70.     }
  71.  
  72.     if(c==' '){
  73.     i++;
  74.     j=0;
  75.     }
  76.  
  77.     }
  78.  
  79.     rewind(fp);
  80.     i=0;
  81.     j=0;
  82.  
  83.     for(i=0;i<num;i++){
  84.  
  85.          printf("\n");
  86.     for(j=0;j<20;j++){
  87.     printf("%c", M[i][j]);
  88.     }
  89.  
  90.     }
  91. }
  92.  

Gracias.

Saludos.
299  Programación / Programación C/C++ / Re: contar letras de un texto en: 2 Julio 2012, 16:26 pm
Daniyo, unas aclaraciones. En C, cuando es sólo un carácter, no se puede pedir con gets, hay que utilizar scanf.

Además, para comparar dos caracteres, no se usa la función strcmp, sino como si compararas dos números.

También creo que se refiere el enunciado a que cuentes todos los caracteres de la cadena, no solo uno que le pida el usuario.

Te dejo el código de daniyo corregido, AlonsoQ. En caso de que sea contando todos los caracteres de la cadena, prueba a mirar lo que te dije en mi último mensaje, y si tienes alguna duda, pregunta y te intento ayudar a hacer el código.

Código
  1. #include <string.h>
  2. #include <ctype.h>
  3. #include <stdio.h>
  4.  
  5. int main(){
  6. char cadena[256];
  7. char letra;
  8. int i;
  9. printf("Introduce una cadena:\t");
  10. gets(cadena);
  11. int tamano=strlen(cadena);
  12. for( i=0; i<tamano; i++){
  13.  cadena[i]=tolower(cadena[i]);
  14. }
  15.  
  16. printf("¿Que letra quiere contar?");
  17. scanf("%c", &letra);
  18. int count=0;
  19. for(j=0; j<tamano; j++){
  20.  if(cadena[j] == letra) count++;
  21. }
  22. printf("La letra aparece %d veces", count);
  23. return 0;
  24. }
  25.  
  26.  
  27.  

Edito:

Por cierto, AlonsoQ, te recomiendo inicializar todas las variables justo después de "int main(){", y no esparcidas por todo el código. Ahora mismo no pasa nada, porque son códigos sencillos, pero mejor que te vayas acostumbrando para cuando trabajes con programas más complejos.
300  Programación / Programación C/C++ / Re: contar letras de un texto en: 2 Julio 2012, 16:03 pm
A mí se me ocurre lo siguiente:

Podrías crear una cadena auxiliar, en la que copiaras el contenido de la cadena de caracteres que quieres contar el número de veces que aparece cada letra.

Con un bucle for anidado, vas comprobando el primer carácter con todos los demás de la cadena, y en caso de coincidir, aumentas el el contador de dicha letra en uno. Además, si coinciden, sustituyes en la cadena auxiliar dicho carácter por un espacio, para que cuando el bucle for llegue a dicho carácter no tengas que contar letras.

Espero haberme expresado bien...

Saludos.
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines