Bueno te dejo esta version hecha en c, el codigo no esta tan limpio como deberia pero te dara una idea en c++ es mucho mejor la implementacion
Edito:
te dejo otra opcion usando funciones como strcpy y strcat
Código (c) [Seleccionar]
#include <stdio.h>
void fPalabrasNumeros2(char *palabra){
char almacen[255];
int entro=0;
int i=0;
int cont=0;
for(i=1;i<strlen(palabra);i++){
if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
|| (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
entro=1;
almacen[cont]=palabra[i];
almacen[cont+1]='\0';
cont++;
}
else if(entro==1){
entro=0;
almacen[cont]=' ';
almacen[cont+1]='\0';
cont++;
}
}
printf("%s",almacen);
}
int main(int argc, char *argv[])
{
char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";
fPalabrasNumeros2(palabra);
getchar();
return 0;
}
Edito:
te dejo otra opcion usando funciones como strcpy y strcat
Código (c) [Seleccionar]
#include <stdio.h>
void fPalabrasNumeros2(char *palabra){
char almacen[255];
int entro=0,i=0;
char *x=malloc(sizeof(char));
strcpy(almacen,"");
for(i=1;i<strlen(palabra);i++){
if((isdigit(palabra[i]) && isdigit(palabra[i+1])||(isdigit(palabra[i]) && isdigit(palabra[i-1]))
|| (isdigit(palabra[i]) && palabra[i+1]==' '&& palabra[i-1]==' '))){
entro=1;
*x=palabra[i];
strcat(almacen,x);
}
else if(entro==1){
entro=0;
*x=' ';
strcat(almacen,x);
}
}
printf("%s",almacen);
free(x);
}
int main(void)
{
char *palabra="la casa 23 es mas bonita que la 56 y la 5+6";
fPalabrasNumeros2(palabra);
getchar();
return 0;
}