problemas con c
Re: problemas con c
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.
De nada fires. No te desesperes con la programacion, es algo de mucha paciencia y al final acaba gustando.
- Dragonlich
- Mensajes: 584
- Registrado: 05 Feb 2007 07:34
- Ubicación: Murcia
Re: problemas con c
No solo que hacia mucho tiem po que no tocaba programacion, sino que ademas me estaba confunciendo con delphi jejejejejeje :p
Juegos online a los que juego:
http://world5.monstersgame.es/?ac=vid&vid=58039460
http://world2.techwarrior.es/?ac=vid&vid=98006749
http://www.silkroadonline.net/
http://world5.monstersgame.es/?ac=vid&vid=58039460
http://world2.techwarrior.es/?ac=vid&vid=98006749
http://www.silkroadonline.net/
Re: problemas con c
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:
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();
}
Re: problemas con c
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
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
Re: problemas con c
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
- jesusron13
- Mensajes: 1128
- Registrado: 02 Feb 2007 17:36
- Ubicación: Zafra
Re: problemas con c
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...
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
XFI Fatal1ty / Enermax Noisetaker 600w / Logitech Z5500 / CM Stacker / Canon MP610