Buenas, estoy iniciandome en la programacion c++ y hay ciertas cosas que no entiendo. Ojala pueda ayudarme.
Hay una parte de un codigo que no entiendo.El programa es simple. Consiste en que dada una cadena se ingrese un caracter y el programa debe crear una subcadena que contenga todos los elementos que habia antes de ese caracter.
Ejemplo:
Cual es la cadena?: "El cielo esta nublado"
Ingrese el caracter a buscar: "a"
La subcadena es: "El cielo est"
El profesor del curso, hizo el siguiente codigo:
Código:
#include<iostream>
#include<stdio.h>
using namespace std;
const int N=250;
void LeerCadena(char cad[N])
{
cout<<"Cual es la cadena:"; fflush(stdin);
gets(cad);
}
char* GeneraSubcadena(char *c, char car)
{ static char x[N];
char *q;
q=x; //q=&x[0];
while(*c!='\0')
{
if(*c!=car)
{ *q=*c;
q++;
}
else
{ *q='\0';
break;
}
c++;
}
return x;
}
int main()
{ char cadena[N],a, *cade;
cout<<"Ingrese caracter a buscar:", cin>>a;
LeerCadena(cadena);
cade=GeneraSubcadena(cadena,a);
cout<<"La subcadena es = "<<cade<<endl;
system ("pause");
return (0);
}
#include<stdio.h>
using namespace std;
const int N=250;
void LeerCadena(char cad[N])
{
cout<<"Cual es la cadena:"; fflush(stdin);
gets(cad);
}
char* GeneraSubcadena(char *c, char car)
{ static char x[N];
char *q;
q=x; //q=&x[0];
while(*c!='\0')
{
if(*c!=car)
{ *q=*c;
q++;
}
else
{ *q='\0';
break;
}
c++;
}
return x;
}
int main()
{ char cadena[N],a, *cade;
cout<<"Ingrese caracter a buscar:", cin>>a;
LeerCadena(cadena);
cade=GeneraSubcadena(cadena,a);
cout<<"La subcadena es = "<<cade<<endl;
system ("pause");
return (0);
}
Siendo principiante me ha tomado tiempo entender cada parte de ese codigo, pero no llego a entender por qué dentro de la funcion Generasubcadena se declaro la cadena x[ ] como "static". Cuando borro "static" del codigo el programa no muestra ninguna cadena, asi que parece ser algo importante.
Y una pregunta mas: Asi como en el codigo anterior, a veces se crean cadenas dentro de una funcion, luego si queremos retornar esa cadena al main, lo que se retorna es un puntero que apunte hacia dicha cadena. Lo que no entiendo es: Cuando se retorna el puntero, la funcion se cierra y dado que la cadena solo es conocida localmente dentro de la funcion ¿no deberia borrarse todo el contenido del arreglo? por tanto ¿el puntero ya no tendria que apuntar?
Gracias por vuestra ayuda.