Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ecfisa

#11
Hola flony.

Pero de ese modo el código queda muy dependiente de la cantidad de líneas que tenga el archivo...

Me parece que sería mas flexible de este modo:
Código (cpp) [Seleccionar]

void leer_txt(char *txtName) {
 std::vector <std::string> v;
 std::string line;
 std::ifstream is(txtName, std::ifstream::in);

 while(!is.eof()) {
   getline(is, line);
   v.push_back(line);
 }
...


Saludos
#12
Hola 70N1.

De string a LPCWSTR:

Código (cpp) [Seleccionar]
...
 std::string str  = "un texto";
 LPCWSTR LPSTR = (LPCWSTR)str.c_str();
...


Saludos :)
#13
Programación C/C++ / Re: problema con archivos
3 Octubre 2013, 07:11 AM
Cita de: m@o_614 en  2 Octubre 2013, 23:55 PM
ecfisa una ultima duda, por que en tu programa pusiste la funcion feof() en dos whiles?? 
Hola.

Por que de ese modo el ciclo interior puede detectar el fin del archivo, saber que no existen mas caracteres para leer y por tanto finalizar.

Tal vez te resulte mas claro si se expande un poco el código:

...
   // mientras no fin de archivo
   while(!feof(fd)) { 
      i = 0;
      // leer 1 caracter
      car = fgetc(fd);
     // mientras no fin de archivo y el caracter es distinto de ','
      while(!feof(fd) && car != ',')
        // almacenar en variable "cadena"
        cadena = (char*)realloc(cadena,(i+1)*sizeof(char));
        cadena[i++] = car; 
        // leer proximo caracter
        car = fgetc(fd);             
      } // ( se lleyo fin de archivo o una coma )
      cadena[i] = '\0';
      if(strcmp(cadena, nombre) == 0) veces++;
    } //( si "car" es coma continua, si es EOF finaliza )
...


Saludos :)
#14
Programación C/C++ / Re: problema con archivos
2 Octubre 2013, 21:41 PM
Hola.

Otro problema que veo, es que estas presuponiendo que "cadena" va a tener el mismo largo que "nombre" ya que con malloc le reservas la misma cantidad de memoria.

Me explico, si por ejemplo ingresas "Ana" y en el archivo existe el nombre "Hermenegildo" cuando leas ese nombre, la variable "cadena" no va a tener el  espacio necesario para almacenarlo...

Proba de este modo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 50

int main()
{
   FILE *fd;
   int veces = 0, i;
   char captura[TAM], *cadena, *nombre, car;

   if((fd = fopen("F:\\nombre_archivo.txt", "r"))== NULL) {
     printf("Error abriendo archivo");
     return EXIT_FAILURE;
   }

   printf("Ingrese nombre a buscar: ");
   fgets(captura, TAM, stdin);
   captura[strlen(captura)-1] = '\0';

   nombre = (char*)malloc(strlen(captura)*sizeof(char));
   cadena = (char*)malloc(sizeof(char));
   strcpy(nombre, captura);

   while(!feof(fd)) {
     i = 0;
     while(!feof(fd) && (car = fgetc(fd)) != ','  ) {
       cadena = (char*)realloc(cadena,(i+1)*sizeof(char));
       cadena[i++] = car;
     }
     cadena[i] = '\0';
     if(strcmp(cadena, nombre) == 0) veces++;
   }

   printf("El nombre %s ");
   switch(veces) {
     case 0: printf("no se encuentra en el archivo.\n");break;
     case 1: printf("se encuentra 1 vez en el archivo.\n");break;
     default:
       printf("se encuentra %d veces en el archivo.\n",veces);
   }

   free(cadena);
   free(nombre);

   return EXIT_SUCCESS;
}


El ejemplo no contempla que el archivo finalize sin una coma. Si no la tiene y buscas un nombre que esté al final, contabilizará una ocurrencia menos o no lo encontrará de ser el único.

Saludos :)

Edito: Veo que mientras escribía eferion ya señalizó esta falla.
#15
Programación C/C++ / Re: no abre un archivo txt
2 Octubre 2013, 11:46 AM
Hola.

Código (cpp) [Seleccionar]

#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>

using namespace std;

int main()
{
  ifstream miArchivo ("nombres.txt", ifstream::in);
  string linea, nombre;
  bool found = false;

  if (!miArchivo.is_open()) {
    cout << "Error abriendo nombres.txt";
    return EXIT_FAILURE;
  }

  cout << "ingrese el nombre buscado: ";
  getline(cin, nombre);

  while (getline(miArchivo, linea, ','))
    if (linea.find(nombre) != string::npos)
      found = true;

  if (found)
    cout << "el nombre buscado esta presente ";
  else
    cout << "el nombre buscado no esta presente";

  miArchivo.close();

  cout << endl;
 
  return EXIT_SUCCESS;
}


Saludos :)
#16
Hola.

Fijate si te sirve alguna de las opciónes de este enlace: Enabling and disabling interface/adapter.

Saludos. :)
#17
Programación C/C++ / Re: algoritmos divide y venceras
16 Septiembre 2013, 21:29 PM
Hola rir3770.

Aclarando la aclaración :) , tu comentario es muy cierto y se cumple en el caso de enteros con signo negativos.

En este caso, a menos que enviáramos argumentos negativos como límites de la lista, el menor valor que puede tomar "medio" es 0.

Sin embargo, coincido plenamente en que no debe ser la costumbre usar la división por desplazamiento de bits.

Saludos. :)
#18
Programación C/C++ / Re: Duda sobre C++ MFC
14 Septiembre 2013, 08:27 AM
Hola kaozdeoz.

Fijate si te sirve de este modo:
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
#include <sstream>
#include <windows.h>

int main()
{
  float r = 5;
  std::stringstream ss;

  ss << r * 3.1416;
  MessageBoxA(0,
              ((std::string)("El area es: "+ss.str())).c_str(),
              "AREA DEL CIRCULO",
              MB_OK);
  return 0;
}


Saludos :)
#19
Programación C/C++ / Re: algoritmos divide y venceras
14 Septiembre 2013, 07:56 AM
Hola m@o_614.

Citarno seria mas logico dividir el tamanio del vector sobre 2 sin necesidad de hacer la dichosa suma???

Definitivamente creo que no.

Pongamos como ejemplo la búsqueda dicotómica:
Código (cpp) [Seleccionar]

...
#define ELEM_NOT_FOUND -1

int binaria(int buscado, int *arreglo, int fin)
{
  int inicio = 0, medio;
  --fin;
  while(inicio <= fin) {
    medio = (inicio + fin) >> 1;
    if (buscado == arreglo[medio]) return medio;
    if (buscado < arreglo[medio])
      fin = medio - 1;       // la lista se redujo a: 0 - medio-1
    else
      inicio = medio + 1;    // la lista se redujo a: medio+1 - fin
  }
  return ELEM_NOT_FOUND;
}
...


En cada cliclo si el número buscado es mayor que el ubicado en el medio de la lista de elementos, se elimina la mitad inferior de esta, de lo contrario la superior. Y así se sigue reduciendo la lista de elementos a la mitad hasta que se encuentra el elemento o no haya mas elementos que buscar.
Esto no sucedería si siempre tomáramos como cotas a 0 y la cantidad total de elementos.

Citarde que me sirve la variable ini??
Las variables inicio y fin van variando sus valores acorde a los condicionales como muestra el código anterior y sirven para fijar los nuevos límites luego de reducir la lista de elementos a la mitad en cada ciclo.

Saludos :)
#20
Hola  tizerlks1.

La librería ctype.h te ayuda bastante en este caso:

#include <stdio.h>
#include <ctype.h>

int main()
{
 char ch;

   printf("Ingrese un caracter: ");
  ch = getchar();

  if (isdigit(ch))
    printf("Es un numero");
  else if (isalpha(ch)) {
    if (isupper(ch))
      printf("Es una letra mayuscula");
    else
      printf("Es una letra minuscula");
  } else
    printf("Es un caracter");

 return 0;
}


Saludos :)