problemas con c

Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: problemas con c

Mensaje por Zoltelder »

Ya me pareció Dragon que hacia tiempo que no tocabas C, no era capaz de encontrar nada certero en lo que creias erroneo. La verdad es que es así de injusta la programacion, la dejas solo un tiempo sin tocar, aunque sea 1 mes y se te han olvidado muchas cosas.

De nada fires. No te desesperes con la programacion, es algo de mucha paciencia y al final acaba gustando.
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
Avatar de Usuario
Dragonlich
Mensajes: 584
Registrado: 05 Feb 2007 07:34
Ubicación: Murcia

Re: problemas con c

Mensaje por Dragonlich »

No solo que hacia mucho tiem po que no tocaba programacion, sino que ademas me estaba confunciendo con delphi jejejejejeje :p
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

estube cambiando y viendo elñ codigo...me compila super bien...(bueno me da un error que no entiendo) en la linea39 [Warning] passing arg 2 of `strcat' makes pointer from integer without a cast ...porque sale esto??..pero igual me ejecuta..pero el problema es que me sale en pantalla pero despues de un momento me sale una ventana y me cierra..me parece que es un error de memoria...pero porque??
el codigo es:

Código: Seleccionar todo

/*  Ejercicio #34 -lenguaje 1
    Prepare una funcion que retorne la cantidad de ocurrencias de una determinada
    palabra dentro de un parrafo. El prototipo de la funcion es el siguiente:
            FUNCTION CantOcur(parrafo, palabra : Cad40) : Integer;
    Donde Cad40 es un tipo de datos definido como string[40]
*/

#include <stdio.h>
#include <string.h>
#define N 40

//funcion longitud de cadena. Determina la longitud de la cadena ingresada
int longitud_cadena(char *x)
{
    //declarar las variables locales a la funcion longitud_cadena
    int i;
    
    i = 0;
    while( x[i] != '\0')
    {
           i = i + 1;       
    }
    return(i);
}


//funcion para saber cuantas veces se repite una palabra en un parrafo
int CantOcur(char *parrafo, char *palabra)
{
    //declarar las variables locales de la funcion CantOcur
    int i, c = 0, w;
    char pal[N];
    
    strncpy(pal,"",1);
    for( i = 0; i < longitud_cadena(parrafo); i++)
    {
       if(palabra[i] != ' ')
       {         
          strcat(pal,palabra[i]);                        
       }  
       else if(strcmp(palabra,pal) == 0)
       {
          c = c + 1;  
          strncpy(pal,"",1);   
       }
       else
       {
           strncpy(pal,"",1);    
       }
    } 
    if(strcmp(palabra,pal) == 0)
    {
        c = c + 1;    
    }
    return(c);
}



//funcion principal
main()
{
      //declarar las variables locales del programa principal      
      char parrafo[N], palabra[N];
      short cant;
      
      printf("Ingrese un texto por favor: \n");
      scanf("%s",&parrafo);
      printf("Ingrese una palabra cualquiera: \n");
      scanf("%s",&palabra);
      cant = CantOcur(parrafo, palabra);
      if ( cant == 0 )
      {
         printf("La palabra %s no esta en el parrafo\n",palabra);     
      }
      else if( cant == 1 )
      {
           printf("La palabra %s esta solo %d vez en el parrafo\n",palabra, cant);     
      }
      else
      {
          printf("La palabra %s esta %d veces en el parrafo\n",palabra,cant);    
      }
      getch();
}



Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: problemas con c

Mensaje por Zoltelder »

El problema es que como tu lo quieres hacer no vas a poder.
Te explico: la funcion strcat concatena desde el final de una cadena (cadena destino) la cadena fuente. Una cadena sabe cual es su final porque se inserta en su final el caracter \0, de ahi que cuando tu declaras una cadena la tienes que declarar de el tamaño que necesites + 1.

Entonces el problema es que te da el fallo porque estas intentando concatenar caracter a caracter individualmente de PALABRA a PAL y la funcion strcat concatena cadenas enteras, no parciales.

Lo que tendrias que hacer es que cuando en palabra sea != ' ' , irlo metiendo en una cadena auxiliar. Entonces luego concatenarias en PAL la cadena auxiliar.

Al hacer esto tiene un inconveniente y es que tienes que poner cuando acaba la cadena auxiliar o si no la cadena no tendrá final y no podras concatenar, por lo que tendras que poner tu en la ultima posicion que se haya ocupado en la cadena auxiliar el \0 para indicarle el fin de cadena
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

gracias por la ayuda..y la explicacion...me podrias dar un ejemplo de eso...porque no se como hacer..ademas mi idea es meter en una variable todas los caracteres individualmente y que sean diferentes de espacio para poder despues comparar con otra variable..como lo sabia hacer hice el tema de concatenar..no se si me explico bien..por eso si es posible que me des un ejemplo claro de como me estas explicando porfavor:)muchas gracias :)
Avatar de Usuario
jesusron13
Mensajes: 1128
Registrado: 02 Feb 2007 17:36
Ubicación: Zafra

Re: problemas con c

Mensaje por jesusron13 »

A ver, lo que Zoltelder trata de decirte es que no puedes concatenar una cadena con otra caracter a caracter sino que tendrías que declara una nueva cadena, en la cual le metes todos los caracteres que tengas en palabra y al final uno más para final de cadena(\0), una vez tengas llena la cadena con los caracteres puedes concatenar.

No se si me explico...
Asrock Dual Sata2 939 / AMD X2 3800+ / 2*1 GB GSKill 400mhz 2-3-2-5 / nVIDIA 7900 GTO 512mb /
XFI Fatal1ty / Enermax Noisetaker 600w / Logitech Z5500 / CM Stacker / Canon MP610
Responder