Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2013
KroSaver KroSaver is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 20
Poder: 0
KroSaver Va por buen camino
Question Problemas en funcion

Buenas de nuevo a todos, segunda duda por dia espero no molestar

Bueno estoy intentando pasar una funcion que hice en c++ de encontrar determinada palabra en un texto a delphi pero tengo un error muy tonto y es que no me permite hacer esto:

Código:
function EncontrarCadena(Cadena: array [0..MAX_PATH] of char): Boolean;
Osea darle directamente MAX_PATH al declarar la funcion, ¿como podria asignarselo dentro de la funcion?

gracias de antemano y saludos
Responder Con Cita
  #2  
Antiguo 20-02-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

En Delphi podrías usar el tipo string sin problemas:

Código Delphi [-]
function EncontrarCadena(Cadena: string): Boolean;
begin
  // Código de la función
end;

Ahora, no veo el por que crear una función si el mismo Delphi ya cuenta con funciones que te pueden ayudar para lo mismo:

Código Delphi [-]
if Pos('Subcadena', 'Esta función busca una subcadena en una cadena') > 0 then
  ShowMessage('Subcadena encontrada');


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #3  
Antiguo 20-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿Podrías poner el código C++ original?
Responder Con Cita
  #4  
Antiguo 20-02-2013
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
La sintaxis que estás utilizando "Cadena: array [0..MAX_PATH] of char" es para declarar una variable, no el parámetro de una función. En este momento no recuerdo exactamente como se definen los parámetros array en Delphi. Talvez un compañero lo pueda aclarar.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 20-02-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por Chris Ver Mensaje
La sintaxis que estás utilizando "Cadena: array [0..MAX_PATH] of char" es para declarar una variable, no el parámetro de una función. En este momento no recuerdo exactamente como se definen los parámetros array en Delphi. Talvez un compañero lo pueda aclarar.

Saludos!
Sería algo más o menos como esto:

Código Delphi [-]
type
  TArrayOfChar = array [ 0 .. MAX_PATH ] of Char;

{...}

function FindString( source : TArrayOfChar ) : boolean;
begin
  result := false;
  // TODO
  raise Exception.Create( 'Function "FindString()" not yet implemented' );
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 20-02-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
Código Delphi [-]
  result := false;
Me parece que esto es redundante. Siendo Result una variable boolean, se inicializa a false automáticamente

// Saludos
Responder Con Cita
  #7  
Antiguo 20-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola KroSaver.

Creo que la forma mas simple es la que te sugiere maeyanes en el segundo mensaje.

Ejemplo Delphi:
Código Delphi [-]
function EncontrarCadena(cad, sub: string): Integer;
begin
  cad:= LowerCase(cad);
  sub:= LowerCase(sub);
  Result:= Pos(sub, cad);
end;
Equivalente C++:
Código:
#include <ctype>
#include <iostream>

int EncontrarCadena(std::string sub, std::string cad)
{
  for(int i=0;cad[i];i++) cad[i] = tolower(cad[i]);
  for(int i=0;sub[i];i++) sub[i] = tolower(sub[i]);
  return cad.find(sub);
}
Equivalente C:
Código:
#include <string.h>
int EncontrarCadena(char *sub, char *cad)
{
  char *d;
  int i;
  for(i=0;cad[i];i++) cad[i] = tolower(cad[i]);
  for(i=0;sub[i];i++) sub[i] = tolower(sub[i]);
  d = strstr(cad, sub);
  if (d) return  d - cad; // Posición de cadena hallada
  return -1;
}
Con la salvedad que en C/C++ se referencia al primer caracter por el índice 0 (en Delphi es 1), por lo que las funciones devolverán el valor de la posición disminuido en uno.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 20-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Siendo Result una variable boolean, se inicializa a false automáticamente
Eso no es verdad, Román. Así sería si se tratara de un campo en una clase, pero, como seguramente recordarás, las variables que no usan contadores de referencias (aun siendo Result) no se inicializan en automático y pueden traer cualquier cosa de inicio.

Por cierto, a mí y a muchos otros nos alegra verte de nuevo en la palestra.

¡Un abrazo!
Responder Con Cita
  #9  
Antiguo 21-02-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Me parece que esto es redundante. Siendo Result una variable boolean, se inicializa a false automáticamente

// Saludos
Conviene dejar las cosas claras.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 20-02-2013
KroSaver KroSaver is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 20
Poder: 0
KroSaver Va por buen camino
Bueno esque usar funciones propias no me mola las prefiero hacer yo y meter cuanta menos basura posible en el exe final.

el codigo de la funcion en c++ la hicimos con mi compañero TR31N0RD:
Código:
#include <stdio.h>
#include <windows.h>

bool EncontrarCadena(char *Cadena1, char *Cadena2)
{
    
    char *cadena1=(char*)malloc(strlen(Cadena1));        memset(cadena1,0,strlen(Cadena1));        strcat(cadena1,Cadena1);
    char *cadena2=(char*)malloc(strlen(Cadena2));        memset(cadena2,0,strlen(Cadena2));        strcat(cadena2,Cadena2);

    if(strlen(Cadena1) < strlen(Cadena2)){return false;} //como la cadena2 es mayor que la cadena1 es imposible que la cadena 1 contenga a la cadena2
    int c=0;
    int i=0;
    bool validate=false;
    
    //Convertimos a minusculas
    for(c=0;cadena1[c]!='\0';c++)
    {
        if((cadena1[c]>=65)&&(cadena1[c]<=90)){cadena1[c]+=32;}
    }
    
    for(c=0;cadena2[c]!='\0';c++)
    {
        if((cadena2[c]>=65)&&(cadena2[c]<=90)){cadena2[c]+=32;}
    }
    

    
    while(cadena1[c]!='\0')  // hacemos el recorrido sobre toda la cadena1 para buscar que contiene la cadena2
    {
        if(cadena1[c]==cadena2[0]) //si el caracter comparado es igual al primer caracter de cadena2 buscamos el resto de caracteres 
        {
            i=1; //como ya el primer caracter es igual pasamos al segundo caracter que esta en la posicion 1
            while(Cadena2[i]!='\0') //Buscamos el resto de caracteres
            {
                if(cadena1[c+i]!=cadena2[i]){break;} //si son diferentes los caracteres salimos
                i++;            
            }

            if(cadena2[i]=='\0'){return true;}    
        }

    c++;
    }
    return false;
    
}

int main(int argc, char *argv[]) {
    
    char *Cadena1 = "asdjaksxnkasjLoldsfhsdncmsd";
    char *Cadena2 = "loL";
    
    if(EncontrarCadena(Cadena1,Cadena2)==true)
    {
        printf("Cadena encontrada!\n");
    }
    else
    {
        printf("Cadena no encontrada!\n");
    }
    system("PAUSE");
    return 0;
}
Prove lo que respondio dec pero da error en esa linea del type que la verdad en delphi algunos errores no loes explica el compilador.

gracias y saludos
Responder Con Cita
  #11  
Antiguo 20-02-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

No veo por que sea meter basura al exe el usar una función incluida en el mismo lenguaje sobre el cual estás desarrollando.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #12  
Antiguo 21-02-2013
KroSaver KroSaver is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 20
Poder: 0
KroSaver Va por buen camino
Casimiro tranqui tio que no digo que no sepais no seas ingnorante y lee bien lo que escribi tengo esa duda y yasta como digo en todos los mensages cada uno programa como quiere ok?

Asique si vas a decirme esas tonterias creo que te equivocastes de sitio.

Un moderador deveria de leer y no acomodar las frases de otro antes de contestar de esa manera:

Cita:
El caso es que yo intento programar y aprender a programar asi porque asi me libero de codigo basura y las aplicaciones irian mas fluidas, rapidas y claro esta sin ensuciar la memoria
saludos, sigo con esa duda

Última edición por KroSaver fecha: 21-02-2013 a las 12:57:37. Razón: Se me paso agregar eso
Responder Con Cita
  #13  
Antiguo 21-02-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por KroSaver Ver Mensaje
Casimiro tranqui tio que no digo que no sepais no seas ingnorante y lee bien lo que escribi tengo esa duda y yasta como digo en todos los mensages cada uno programa como quiere ok?
Asique si vas a decirme esas tonterias creo que te equivocastes de sitio.
saludos, sigo con esa duda
Cierto, cada uno programa como quiere y sabe. Algunos bien y otros mal.
Por cierto, lo que dije antes no es ninguna tontería. Eres nuevo aquí y no puedes opinar correctamente sobre eso.
Responder Con Cita
  #14  
Antiguo 21-02-2013
KroSaver KroSaver is offline
Miembro
NULL
 
Registrado: feb 2013
Posts: 20
Poder: 0
KroSaver Va por buen camino
Como asi? no puedo opinar?

Aver no intento "INFLUIR MI OPINION ES SOLO MI OPINION" letras mayus por si te lo saltas y no lo lees.

1º ¿Cual es mi duda?

Como declaro la char con MAX_PATH al declarar la funcion.

2º ¿He pedido yo que me den uan funcion que me encuentre una cadena en texto?

No.

3º No quiero hacer de una duda una discusion encima con un moderador que no lee antes de escribir ¿Vale?

saludos y cerrad el tema porque creo que no se me entendio en mi duda dadlo por solucionado.
Responder Con Cita
  #15  
Antiguo 21-02-2013
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
No te sulfures, amigo, creo que el que no ha leído bien has sido tú, yo no he dicho que no puedas opinar, por favor. Lo que he puesto ha sido: no puedes opinar correctamente, sobre si son buenos o malos programadores, porque no los conoces.

Tan sólo trataba de darte a entender que siguieras los consejos de personas que saben y tienen muchísima experiencia.
Pero si no te gusta, no hay problema, como bien dices tú: cada uno programa como quiere.

Desde luego que no voy a iniciar ninguna discusión, tengo otras cosas mejores que hacer, y tú también, seguro
Responder Con Cita
  #16  
Antiguo 21-02-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 22
movorack Va camino a la famamovorack Va camino a la fama
Hola KroSaver,

Con todo respeto y también al igual que casimiro (Que en otras, tiene mas paciencia que muchos... por lo menos que yo) opino que debido a tu inexperiencia y desconocimiento. Estás intentando cosas que si escucharas a quienes te están prestando la ayuda, solventarías de una manera mas sencilla.

Y pues, como te dijeron ya. Delphi, te ofrece no solo un buen IDE, sino un framework (VCL) catalogado como uno de los mejores

Que si quieres puedes obviarlo y volver a pascal puro (puedes usar free pascal), pero si instalas Delphi es porque quieres usar las bondades del mismo, como son acceso rápido a datos, el diseño rápido de aplicaciones y la cantidad de funciones que vas a encontrar.

Mira, en DelphiBasics, puedes encontrar referencias y ejemplos de como usar muchísimas funciones de Delphi que te ayudarán a no reinventar la rueda.

Con respecto a tu duda, puedes declarar un arreglo dinámico como parámetro de una función

Código Delphi [-]
function EncontrarCadena(Cadena : array of char) : boolean
begin
end;

//Ejemplo de uso
if EncontrarCadena(['H','a','s','t','a',' ','l','a',' ','v','i','s','t','a',' ','b','a','b','y']) then
  ShowMessage('Terminator');
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas para crear una funcion ergonickolas Varios 18 08-09-2011 19:02:54
Problemas con la funcion system luiggixD C++ Builder 3 23-04-2008 15:37:37
Problemas para crear una funcion fartycl Varios 1 04-07-2006 19:47:50
Problemas con funcion RoundTo vick Varios 2 12-10-2005 02:12:35
Problemas con funcion bbjb Varios 10 27-09-2004 18:08:19


La franja horaria es GMT +2. Ahora son las 00:35:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi