Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 9 Julio 2018, 23:48 pm



Título: Problemas luego de crear una funcion que "extrae" subcadenas
Publicado por: Beginner Web en 9 Julio 2018, 23:48 pm
Bueno este programa tiene varios tipos de problemas, ya que no puedo mostrar por paantalla la extraccion de subcadena o asignar en otra variable y mostrarla en pantalla seguidamente lo mas cercano uqe logre fue que despues de ingresar algo por teclado me muestre la subcadena exraida.
Use cin >> ws; pero, la verdad no tengo idea porque pasa esto.

Código
  1. #include <iostream> //Sorry
  2. #include <stdlib.h> //por
  3. #include <string.h>// las
  4. #include <stdio.h> //librerias
  5.  
  6. using namespace std;
  7.  
  8. char* subcadena(char* cadena, int inicial, int final);
  9.  
  10. int main(){
  11. char materia[]="PROGRAMACION ESTRUCTURADA";
  12. cin >> ws;
  13. cout << subcadena(materia,0,11) << endl;
  14. system("pause");
  15. }
  16.  
  17. char* subcadena(char *cadena, int inicial, int final)
  18. {
  19. char *substring;
  20. int indice=0;
  21. if(inicial<0 || final>strlen(cadena)){
  22. return NULL;
  23. }
  24. else{
  25. for(int i=inicial;i<=final;i++){
  26. substring[indice]=cadena[i];
  27. indice++;
  28. }
  29. return substring;
  30. }
  31. }
  32.  

Alguna respuesta puntual? Muchas gracias  ;-)


Título: Re: Problemas luego de crear una funcion que "extrae" subcadenas
Publicado por: ThunderCls en 11 Julio 2018, 20:15 pm
Código
  1. string cadena = "PROGRAMACION ESTRUCTURADA";
  2. cout << cadena.substr(0, 11) << endl;

Si por algún motivo no puedes usar std::string.substr()




Título: Re: Problemas luego de crear una funcion que "extrae" subcadenas
Publicado por: CalgaryCorpus en 12 Julio 2018, 06:44 am
La funcion tiene que hacer una copia de los datos que recibe, y actualmente el puntero substring no apunta a nada.
Si pidieras memoria y los asignaras al puntero substring, la funcion tendra un mejor comportamiento.

Tal vez algo como:

char* substring = new char[final-inicial+1] podria ayudar.

Faltaria posiblemente poner un '\0' al final.