Cómo convertir un string en una lista de strings

Iniciado por JonaLamper, 15 Octubre 2015, 15:26 PM

0 Miembros y 1 Visitante están viendo este tema.

geeke

Cita de: DarK_FirefoX en 18 Octubre 2015, 15:57 PM
La utilización de GOTO está considerada una mala práctica de programación, la cual lleva a un código "espagueti".

Deberías leerte este articulo escrito por Edjer Dijkstra para una publicación de la ACM en 1968

Siempre los anti-goto citan directamente el articulo de Edsger Dijkstra's para justificar su posición de rechazo hacia goto. Lastima que el articulo de Dijkstra's prácticamente no tiene nada que ver con la forma de que goto es utilizado estos días, por lo tanto lo que dice el articulo tiene poca o ninguna aplicabilidad en la escena de programación moderna.

Uno puede llegar a escribir código difícil de leer sin usar goto, por lo tanto no es la
característica del lenguaje la que conduce a un código ilegible e imposible de mantener ni tampoco la sintaxis mas bien son los malos programadores los que causan esto.

Evitar usar goto porque quiere evitar producir código ilegible no tiene sentido si su código goto es legible, entonces no hay nada malo en ello, el problema viene cuando se abusa de ellos. Por lo que todo esto me lleva a la conclusión de que todo este rechazo hacia goto es solo un modismo establecido no porque algunos programadores lo usen de manera ineficiente yo debería evitar usarlo.

Saludos!

ivancea96

#11
Lo que haces con GOTO, lo puedes hacer con bucles y condiciones.
La finalidad de cada bucle y condición es más evidente a la vista que un GOTO (por no decir, que las etiquetas hay que buscarlas, cosas que con bucles y condiciones no pasa).
Además, en POO, el uso de GOTO es aun más terrible.

GOTO está muy bien en BATCH, y es necesario en ASM (JMP), pero en C++ no hay justificación lógica para utilizarlo.

Como dato, no leí el artículo de Dijkstra xD

Gunhack

En c
Código (cpp) [Seleccionar]


#include <cstdio>
#include <cstring>
#include <ctype.h>

using namespace std;

int nPal(char *cadena); //Funcion que regresa el numero de palabras.

int main() {

  char cadena[] = {"Pablito clavo un clavito en la calva de un calvito"};

  int nPalabras = nPal(cadena); // Variable que almacena el numero total de palabras en la cadena.
  char tokens[nPalabras][30]; //Variable que almacena cada palabra en un espacio del arreglo.
  char *token = strtok(cadena, " ,.!?"); //Función que convierte una cadena a tokens.

  nPalabras = 0;
  while(token != NULL) {

    strcpy(tokens[nPalabras++], token); //Se almacena cada token (palabra) en un espacio del arreglo.
    token = strtok(NULL, " ,.-!?");
  }

  for(int i = 0; i < nPalabras; i++){
    printf("%s\n", tokens[i]);
  }
}

int nPal(char *cadena) {

  int n = 0;

  for(int i = 0; i < strlen(cadena); i++) {

    if(cadena[i] == ' ') {
      n++;
    }
  }

  return n+1;
}



En c++
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

int nPal(string cadena) {

  int n = 0;

  for(int i = 0; i < cadena.length(); i++) {

    if(cadena[i] == ' ' || cadena[i] == '/' || cadena[i] == '.' || cadena[i] == ',') {
      n++;
    }
  }

  return n+1;
}

int main ()
{
  string descomponer ("Pablito clavo un clavito en la calva de un calvito");
  string token[nPal(descomponer)];
  int ends=0;
  int inicio=0;
  int i=0;

  do{
  inicio=descomponer.find_first_not_of(".,/ ",ends);
  ends=descomponer.find_first_of(".,/ ",inicio);
  token[i]=descomponer.substr(inicio,ends-inicio);

  cout << token[i]<<endl;
  i++;
  }while (ends!=-1);
}

Orubatosu

El "Goto" debería de estar prohibido, así de claro.

Yo recuerdo hace años, muchos años. Cuando los PC´s de escritorio eran algo que no se conocía e IBM no había sacado su XT (si, soy viejo ¿pasa algo?)

Los primeros ordenadores domésticos usaban BASIC (en su mayoría). Un lenguaje interpretado y que en ese momento hacía un uso abundante del Goto, e igualmente del GoSub.

Puede pensarse que un Gosub en realidad es una llamada a función, y que Goto no es tan malo. El problema no es la existencia de las herramientas, el problema es el uso que se termina dando a las mismas.

El que quiera asustarse, comentarle que algunas versiones del BASIC permitían incluso un "Goto variable". Donde la variable indica el número de línea al que debía de saltar la ejecución.

Imaginar algo como eso. ¿A que parece inofensivo?

Invito al que crea eso, a intentar depurar un programa de un par de miles de líneas que haga uso y abuso de esos goto, y veréis que gracioso es.

El cabo de una hora, no tenemos ni puñetera idea de por donde anda el flujo del programa.

Claro, es posible hacer una programación clara, documentada, estructurada, etc... incluso con la existencia de estas atrocidades. El problema es que siempre, siempre encontraremos a mas de un mendrugo que no lo hará, y si os toca intentar depurar o actualizar algo así, os cagaréis en todo lo santo y en la familia del que ha hecho esa gracia.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

DarK_FirefoX

Cita de: Orubatosu en 26 Octubre 2015, 09:56 AM
El "Goto" debería de estar prohibido, así de claro.

Yo recuerdo hace años, muchos años. Cuando los PC´s de escritorio eran algo que no se conocía e IBM no había sacado su XT (si, soy viejo ¿pasa algo?)

Los primeros ordenadores domésticos usaban BASIC (en su mayoría). Un lenguaje interpretado y que en ese momento hacía un uso abundante del Goto, e igualmente del GoSub.

Puede pensarse que un Gosub en realidad es una llamada a función, y que Goto no es tan malo. El problema no es la existencia de las herramientas, el problema es el uso que se termina dando a las mismas.

El que quiera asustarse, comentarle que algunas versiones del BASIC permitían incluso un "Goto variable". Donde la variable indica el número de línea al que debía de saltar la ejecución.

Imaginar algo como eso. ¿A que parece inofensivo?

Invito al que crea eso, a intentar depurar un programa de un par de miles de líneas que haga uso y abuso de esos goto, y veréis que gracioso es.

El cabo de una hora, no tenemos ni puñetera idea de por donde anda el flujo del programa.

Claro, es posible hacer una programación clara, documentada, estructurada, etc... incluso con la existencia de estas atrocidades. El problema es que siempre, siempre encontraremos a mas de un mendrugo que no lo hará, y si os toca intentar depurar o actualizar algo así, os cagaréis en todo lo santo y en la familia del que ha hecho esa gracia.


+1

Salu2s

PD: Cada cual es libre de hacer lo que quiera, solo cite el artículo porque creo necesario su lectura para entender porque no se DEBE usar.