FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; gracias de antemano y saludos |
#2
|
|||
|
|||
Hola...
En Delphi podrías usar el tipo string sin problemas:
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:
Saludos... |
#3
|
||||
|
||||
¿Podrías poner el código C++ original?
|
#4
|
||||
|
||||
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! |
#5
|
||||
|
||||
Cita:
|
#7
|
|||
|
|||
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; } gracias y saludos |
#8
|
|||
|
|||
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... |
#9
|
|||
|
|||
Bueno cada uno lo ve a su manera no?
Yo solo pregunte como hacer eso que tiene que ser lo mas simple pero que no me sale cada uno escrivimos aplicaciones como queremos. saludos |
#10
|
||||
|
||||
Hola KroSaver.
Creo que la forma mas simple es la que te sugiere maeyanes en el segundo mensaje. Ejemplo Delphi: 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); } 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; } Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
|||
|
|||
Si bueno pero si te fijas metes string.h y no ablemos de iostream porque esa libreria sique te agrega basura si compilas en Dev c++ una aplicacion de consola nada mas que tenga iostream y el peso del exe es exagerado pero a lo bestia.
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 que es algo a mi parecer que hoy en dia casi nadie intenta optimizar imaginad una aplicacion de dimensiones mucho mayores que necesitaria memoria y encima meteriamos basura. He que con esto no intento influir mi opinion es eso solo mi opinion. gracias y saludos |
#12
|
||||
|
||||
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! |
#13
|
||||
|
||||
Bueno, no tenía (ni tengo ) delphi a mano. Pero mi aseveración la basé en el hecho de que el compilador no protesta ni advierte cuando una función de resultado entero no devuelve un valor, mientras que sí lo hace, por ejemplo, con funciones que devuelven cadenas de caracteres.
¿O es alrevés? En fin, de todas maneras, admito que mi argumento no es muy cinetífico que digamos // Saludos |
#14
|
||||
|
||||
Cita:
Aunque, tratándose de la variable Result, en lugar de inicializarse el String como cadena vacía, entra a la función como si fuera un parámetro:
No se me ocurre una forma de ayudarte a solucionar lo que pasa actualmente con tu instalación de Delphi, pero si al menos de incentivo científico puede servir el código anterior... Mucha suerte Román. |
#15
|
||||
|
||||
Cita:
// Saludos |
#16
|
||||
|
||||
Cita:
No estoy de acuerdo con que el utilizar bibliotecas sea incluir basura. Con dicos rígidos de 1TB y 4, 8, 16 Gb de RAM corriendo en varios núcleos a velocidades que meten miedo, hoy por hoy (y tenes razón) espacio y velocidad no son aspectos que preocupen a muchos. Ni comparar cuando en asm mezquinabamos bits de nuestros 64Kb para el Z-80, TSM9900, VIC-V20,... y funcionando de 1 a 3 Mhz!!!... Mi experiencia dice que en el reemplazo por rutinas propia la ganancia de velocidad será: La mayoría de las veces ninguna, muy pocas veces será nula y en contados casos alguna. (No vamos a creer que los que diseñan las bibliotecas son flojos de entendederas... ) Si tus metas son la velocidad y tamaño, te recomendaría usar C, Pascal o Assembler (ningún código será mas compacto, veloz y eficiente que el generado por un buén programador de assembler). Delphi y Builder C++ generarán ejecutables más voluminosos pero superan con creces esos detalles con una drástica disminución del tiempo de desarrollo, gran facilidad de mantenimiento, sencillez en la conexión con bases de datos, etc, etc. Lo anterior dicho desde la vereda profesional con las exigencias y presiones que eso supone, pero como nos comentas que estás aprendiendo, es excelente que te intereses por intentar comprender, reemplazar e incluso mejorar las funciones de biblioteca. Es la actitud que hace falta, no me cabe duda que llegarás ser un buén programador en menos tiempo de lo que supones. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 21-02-2013 a las 04:51:23. |
#17
|
|||
|
|||
Cita:
Y bueno nada sigo con esa duda como ago para declarar una max_path char eso es lo unico que necesito porque lo que es la funcion de busqueda me la haria yo sin problema, es un problema bastante tonto pero nada no veo como declarar asi la char. saludos y buena comunidad teneis la verdad! |
#18
|
||||
|
||||
Conviene dejar las cosas claras.
|
#19
|
||||
|
||||
Cita:
Ellos dirán que no es cierto, por humildad, pero lo son. (*) suponiendo que exista esa lista . |
#20
|
|||
|
|||
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:
Última edición por KroSaver fecha: 21-02-2013 a las 12:57:37. Razón: Se me paso agregar eso |
|
|
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 |
|