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


 


Tema destacado:


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 52
1  Programación / Programación C/C++ / Re: Remover primeros caracteres de una variable TCHAR en: 8 Diciembre 2014, 23:41
TCHAR no puede ser de 4 bytes, como maximo de 2 (unicode).

TCHAR MSDN:
http://msdn.microsoft.com/en-us/library/office/cc842072%28v=office.15%29.aspx

No entiendo x64Core, ¿dónde dice el_doctor que sea de cuatro bytes? , creo que leiste mal , pone 4 caracteres, o yo ando muy perdido en esto :(


Hola no se si ya está este tema; bueno todavía me resulta difícil trabajar con este tipo de variable, cómo podría remover los primeros 4 caracteres de un tipo TCHAR.

El tipo TCHAR es solo un typedef de char en las plataformas  ANSI y DBCS, así que trabaja como ese tipo. Para quitar N caracteres simplemente copia los que quedarían si los eliminases en las primeras posiciones, es decir:

HOLA
LA
LALA
LA'\0'A

Es decir debes copiar en la primera posición el caracter que está N posiciones más delante mientras no supere el tamaño de la cadena, si no te dará un error de violación de acceso a la memoria. Una vez hecho eso debes terminar la cadena nueva en un caracter nulo, para ello al eliminar N caracteres, el caracter nulo estará ahora en el largo de la original menos los N caracteres eliminados, un ejemplo para dos caracteres sería (te toca a ti ponerlo como TCHAR):

Código
  1. char cadena [] = "hola que tal";
  2.  
  3. // Desde i = 0 hasfta que 2 + i no sea el largo de la cadena.
  4.  
  5. for(int i = 0; 2 + i < strlen(cadena); ++i)
  6. {
  7.  // Va copiando en la posicion i , lo que hay dos posiciones mas adelante
  8.  // pues queremos eliminar dos caracteres.
  9.  cadena[i] = cadena[2+i];
  10. }
  11.  
  12. // Al eliminar dos caracteres, el fin de cadena debe quedar en el largo de la
  13. // cadena menos los dos caracteres que hemos eliminado.
  14. cadena[12-2] = '\0';
2  Programación / Programación C/C++ / Re: Mi juego Snake C++ / SDL 2.0 en: 8 Diciembre 2014, 22:01
Me guastaria saber si me puedes aclarar una duda en el código de tu juego.

Vengo empezando en c++ y me falta comprender algunas cosas.

al compilarlo me da un error en esta línea:

str_score = std::to_string( snake.length() - 1 );

y el error es: "error to string is not a member of std"

No modifique el código solo quise compilarlo con el Codeblocks para ejecutrarlo y me devuelve el error que mencione anteriormente.

Gracias por tu ayuda

El método to_string se incluyó en la biblioteca estándar en la última "versión" de C++, es decir C++11. Así que compila el código en C++11. En codeblocks se vas a Settings -> Compiler... Y en la ventanita para seleccionar (compiler flags) selecciona la opción que pone:

Código:
Have g++ follow the C++11 ISO C++ language standard

Saludos.
3  Programación / Programación C/C++ / Re: Algoritmo combinatoria string en: 7 Diciembre 2014, 00:53
De lo anterior se desprende que sabiendo las reglas algunos INCONTINENTES del codigo deciden romperlas y cuando se les aplican las mismas deciden irse del subforo. Muy bien, personalmente les digo que no se los extraña en lo mas minimo sino que muy por el contrario se les agradece su deferencia al ahorrarme trabajo innecesario.

avesudra le deseo mucha suerte respondiendo dudas complejas y novedosas a donde quiera que se vaya, usted si que sabe.
El problema no es la sintaxis sencilla, yo aprendí preguntando en este magnífico foro y sigo aprendiendo, y me encanta ayudar a la gente, me parece raro que nunca te haya leído en algún tema relativamente sencillo, quizás es que como no es de tu nivel no debes responderlo, claro como eres moderador, que a eso se dediquen otros. Lo que he dicho de la sintaxis es en lo que te fijas para defenderte y atacar una prepotencia que no existe, ni que yo fuese aquí Dennis Ritchie. El problema es que cuando sale algún problema más complejo que un punto y coma o algo de eso, si se pone código se borra y si se debate, se cierra el tema.

Yo no sé nada, es más, por día me doy cuenta de que sé menos.

Haz lo que quieras, es curioso que tengas tiempo de estar borrando códigos en lugar de estar ayudando por ejemplo en este hilo, además es algo irónico que en un Subforo de Programación en C, no se aporten códigos, entonces exijo que se cree un subforo de algoritmia porque es lo que se está pidiendo. Es decir a ver si me explico, si yo hubiese puesto un recetario de pasos no me borrais nada ¿verdad?

Y efectivamente, tu trabajo borrando códigos es totalmente innecesario si no se pide la tarea explícitamente (de forma directa poniendo el enunciado).

Porque repito que se ve claramente quien viene con intenciones de aprender y quien no, si no ves eso estás ciego.

Muchos foreros tienen el mismo problema y siempre los que pensamos diferente pasamos a ser ignorados sin proponer ninguna solución respecto al tema bajo tu estricta inflexibilidad respecto de alguna puntualización sobre las normas.

avesudra le deseo mucha suerte respondiendo dudas complejas y novedosas a donde quiera que se vaya, usted si que sabe.
No trates de ponerme de listo porque no lo soy.
4  Programación / Programación C/C++ / Re: Algoritmo combinatoria string en: 6 Diciembre 2014, 20:31
Buenos días,

No tengo código realizado de eso que expongo. Es un algoritmo aparentemente sencillo que yo, como "nuevo" en esto de la programación, no acabo de ver la manera de hacerlo.

Por ello mi mensaje es captar ideas, formas de afrontarlo de alguien con más experiencia o conocimientos.

¿Alguien puede orientarme?

Un saludo y gracias de antemano


Sabes que las letras que cambian  (mayúscula y minúscula)  son n letras, entonces habrá 2n combinaciones posibles. Tengo el código que me ha costado un poco hacerlo, pero me ha salido tan feo que no sé si me he complicado la vida o qué. En esencia lo que he hecho ha sido mirar las letras que cambian, luego hago una plantilla de las letras que no cambian y las posiciones que van a sustituirse se indican por una coma.

Bueno voy a poner el código a ver si te ayuda porque es que no sé, creo que me he complicado la vida y que se puede hacer más sencillo. Bueh ahí va:

EI: Codigo reportado y borrado.

Citar
A los asesinos de código:

Si ustedes pretenden ser papá y mamá de cada usuario háganlo, no cae sobre mi responsabilidad la ética ni la moral de cada usuario, me sé perfectamente las normas del subforo, no venga a darme lecciones de lo que debo o no debo hacer.

Soy una persona muy comprensiva, pero ustedes se están cargando el subforo. Esto lo pongo en mayúsculas por si no les queda a ustedes claro:

SE PUEDE DISTINGUIR PERFECTAMENTE ENTRE UNA PERSONA QUE PIDE LAS TAREAS EXPLÍCITAMENTE Y OTRA QUE QUIERE APRENDER.

Si no entienden los mensajes, no entra bajo mi responsabilidad la capacidad de compresión lectora de cada Usuario/Moderador.

Este subforo se está convirtiendo en un estercolero de errores de sintaxis sin algo más novedoso, y eso lo estan provocando ustedes ¿porqué cuando algunos de ustedes ponen código no pasa absolutamente nada?

Han cabreado ya a muchos usuarios por el mismo tema, se están pasando ustedes de la raya, se está yendo mucha gente que podría ser de provecho en el foro.

Me niego a seguir respondiendo dudas de sintaxis sencilla, que lo hagan Eternal Idol y demás.

Así que por lo demás, teneis otro forero más que va al cubo de la basura en este subforo.
5  Programación / Programación C/C++ / Re: Ayuda tolower & overwrite c++ en: 3 Diciembre 2014, 11:56
Lo de la función tolower lo puedes solucionar con la función transform de la biblioteca <algorithm> , que te permite hacer una operación específica sobre cada elemento que recorre un iterador.

Código
  1. std::string str = "mi cadena";
  2. std::transform(str.begin(), str.end(), str.begin(), std::tolower);

Un saludo.
6  Programación / Programación C/C++ / Re: [AYUDA] Remplazar cadena en un string C++ en: 29 Noviembre 2014, 20:13
Hola francoyo1998, esto no es Python, en C++ hay que poner llaves para declarar los ámbitos, no es identándolo. Con tu código solo reemplazarías un triple espacio por cada línea, prueba así:
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <fstream>
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    ifstream in("archivo.txt"); // Open for reading
  10.    ofstream out("j.txt");      // Open for writing
  11.    string s;
  12.  
  13.    //string re("   ");    no es necesario...
  14.  
  15.    size_t position;
  16.  
  17.    if(in)
  18.        while(getline(in, s)) // Discards newline char
  19.        {
  20.            // We find the first match
  21.            position = s.find("   ");
  22.            // We replace "   " until the method find dont find a new match.
  23.            while(position != string::npos)
  24.            {
  25.                // We replace the rest of the matches
  26.                s.replace(position, re.length(),"   ");
  27.                position = s.find(re);
  28.            }
  29.            out << s << "\n"; // ... must add it back
  30.        }
  31.    else
  32.        cout << "File couldn't be opened" << endl;
  33.  
  34.    //system("pause>nul");
  35.    cin.get();
  36. }

Lo del cin.get() es para que sea portable.

Saludos.
7  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Subforo de programación de juegos? en: 29 Noviembre 2014, 18:08
Me encanta la idea, en el subforo de Programación en C/C++ siempre andamos corrigiendo errores y nunca hacemos algo "novedoso".

Saludos.
8  Programación / Programación C/C++ / Re: segmentation fault en mi programa en: 29 Noviembre 2014, 16:29
Hola, si pones cualquier cadena e imprimes rutatemp, te salen unos caracteres raros al principio:
Código:
Escribe el nombre de archivo para abrirlo

hola
  H♦/home/miusuario/hola
Process returned 255 (0xFF)   execution time : 8.799 s
Press any key to continue.
, quizás eso al pasarselo a fopen o a alguna función es lo que te está fallando. ¿cómo lo arreglo? pues inicializando todo el arreglo a 0 con memset (o con la función strcopy que te indica el compañero rir3760 en el siguiente post al mío).

Código
  1. void * memset ( void * ptr, int value, size_t num );
Fill block of memory
Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).

En concreto tienes que poner esto para inicializar esa zona de memoria en cero:
Código
  1. memset(rutatemp, 0, 51);
Otra forma de hacerlo sin usar memset es:
Código
  1. char rutatemp[201];     //La ruta completa del archivo
  2. rutatemp[0] = '\0';



También deberías controlar la entrada con la funciones fgets + sscanf.

Además debes mirar si el archivo se ha abierto, si no te dará el segmentation fault. Con un simple if lo puedes comprobar:
Código
  1. archivo = fopen(rutatemp, "rt");
  2. if(archivo)
  3.    // Lo que quieras hacer con el archivo
  4. else
  5.    printf("Error al abrir el archivo");

Sé que no querías código pero la mejor manera es ejemplificando, la programación es aprender de los errores, si alguien te puede sacar de estos comederos de cabeza mejor.
Un saludo.
9  Programación / Programación C/C++ / Re: Como convertir int a string y viceversa? en: 28 Noviembre 2014, 21:48
Bueno entonces si se usa std::string no es mejor usar std::stoi ( C++ 11 ).
Sin duda, no sabía de su existencia, gracias x64Core

Saludos  :rolleyes:
10  Programación / Programación C/C++ / Re: Como convertir int a string y viceversa? en: 26 Noviembre 2014, 00:56
La funciones que andas buscando es esta:
Código
  1. string std::to_string (int val);
  2. string std::to_string (long val);
  3. string std::to_string (long long val);
  4. string std::to_string (unsigned val);
  5. string std::to_string (unsigned long val);
  6. string std::to_string (unsigned long long val);
  7. string std::to_string (float val);
  8. string std::to_string (double val);
  9. string std::to_string (long double val);
Para convertir de int a string utiliza la función:
Código
  1. long int strtol (const char* str, char** endptr, int base);
Saludos.
11  Programación / Programación C/C++ / Re: Por que ésta pequeña función de invertir una lista enlazda funciona? en: 25 Noviembre 2014, 01:01
Hola ShadowA7X, es un código muy limpio y la verdad bastante bueno. Te pongo un ejemplo práctico de lo que hace el algoritmo. Tenemos una lista con 4 nodos (o lista da igual como los llames):

P Q R S

Sabemos que esos nodos tienen un puntero al nodo siguiente, y esos estan tal que asi:
P -> Q , Q -> R , R -> S y S -> NULL

(entendiendo esa flechita por, "el nodo P tiene un puntero que apunta a Q")

Lo que hace esto es invertir el sentido, es decir, que P apunte a NULL, Q apunte a P , R apunte a Q y S apunte a R. (entendiendo por apuntar, que el nodo tiene un puntero que apunta a otro nodo). Realmente no modifica la lista en sí, sino a quienes apuntan sus nodos, el meollo del asunto está aqui:
Código
  1. next=aux->sgte;
  2. aux->sgte=*inicio;

Saludos.
12  Programación / Programación C/C++ / Re: en: 21 Noviembre 2014, 16:25
Hombre lo de poner nombre a las variables no se si se puede hacer, creo que no, lo que si puedes hacer es ir declarando punteros y reservando memoria y guardando esos punteros en un vector que luego eliminas, en ese caso es el segundo codigo que te he puesto. Tambien puedes hacer lo que te comenta Miky.
13  Programación / Programación C/C++ / Re: C++ Crear variables y objetos en tiempo de ejecución en: 21 Noviembre 2014, 10:42
No entiendo bien tu pregunta, si ya tienes definidas las cadenas en una variable ¿para qué quieres otras? , o quieres decir esto:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    std::string sValores[3] = {"uno", "dos", "tres"};
  7.  
  8.    //Creamos las variables a partir de sValores
  9.    std::string cadenaUno  = sValores[0];
  10.    std::string cadenaDos  = sValores[1];
  11.    std::string cadenaTres = sValores[2];
  12.  
  13.    // O a un array constante de caracteres.
  14.    const char *cCadenaUno  = sValores[0].c_str();
  15.    const char *cCadenaDos  = sValores[1].c_str();
  16.    const char *cCadenaTres = sValores[2].c_str();
  17.  
  18.    std::cout << cadenaUno  << std::endl;
  19.    std::cout << cadenaDos  << std::endl;
  20.    std::cout << cadenaTres << std::endl;
  21.  
  22.    std::cout << cCadenaUno  << std::endl;
  23.    std::cout << cCadenaDos  << std::endl;
  24.    std::cout << cCadenaTres << std::endl;
  25.  
  26.    return EXIT_SUCCESS;
  27. }
O quizás te refieras a esto:
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.    string sValores[3] = {"uno", "dos", "tres"};
  11.    vector<string*> variablesNuevas;
  12.    //Creamos las variables a partir de sValores
  13.    for(int i = 0; i!= sizeof(sValores)/sizeof(string); ++i)
  14.    {
  15.        string * tmp = new string(sValores[i]);
  16.        variablesNuevas.push_back(tmp);
  17.    }
  18.  
  19.    for(vector<string*>::iterator it = variablesNuevas.begin(); it != variablesNuevas.end(); ++it)
  20.    {
  21.        cout << **it << endl;
  22.        // Liberamos memoria
  23.        delete *it;
  24.    }
  25.  
  26.    return EXIT_SUCCESS;
  27. }
14  Programación / Programación C/C++ / Re: S.O.S : Programa que solucione sistemas Lineales x método de Gauss :) en: 20 Noviembre 2014, 21:13
Crea una matriz con los coeficientes de las ecuaciones y ya aplicas gauss, resta las filas a lo bestia, aquí puedes multiplicar una fila por 253 si hace falta. De todas maneras despues de aplicar gauss puedes aplicar gauss-jordan y te da las soluciones del sistema.

Un saludo.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 52
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines