Ayuda con programa sencillo

novato
11 de Diciembre del 2005
Hola a todos!!
vereis, soy un novato en esto de la programacion en c++, y tengo un problemilla, ahi va:

Estoy haciendo un programilla que tiene que hacer:
-Pedir al usuario una cadena de caracteres, mezclando letras y numeros.
-EL programa debe separar las letras de los numeros en dos cadenas distintas y presentarlas por pantalla.
-Ha de ser capaz de eliminar los espacios en blanco.

Por ejemplo:
cadena de entrada; sd4534 fghi ils34
resultado: sdfghiils 453434

EL problema que tengo es el siguiente:
Hago un bucle for que vaya recorriendo cada caracter de la cadena de entrada, y viendo aver si es letra, numero o espacio, pero NO SE COMO ALMACENAR LA INFORMACION, me explico;
cuando el programa ve el tipo de caracter que es, nose como guardar y almacenar el caracter, para que luego lo muestre por pantalla.
JEJjejej vaya lioooooo.
No me entiendo ni yo, pero bueno, si me habeis entendido, agradeceria que me echaseis una mano, y sino lo entendeis decirlo y me intento explicar mejor.
SALUDOSSSSSSS

novato
11 de Diciembre del 2005
de momento he hecho esto, pero no me hace caso ni por asomo jejeje. Bueno, no os riais de la barbaridad que voy a poner:

#include <iostream.h>
#include <string.h>
void main (void)
{
int longitud, numeros[100], numero;
char texto[100];
char letras[100], letra;

cout<<"Escriba un texto con letras y numeros mezclados: "<<endl;
cin.getline (texto,100);


longitud=strlen(texto);

for (int i=0;i<longitud;i++){

if (texto[i]>=\'a\' && texto[i]<=\'z\' || texto[i]>=\'A\' && texto[i]<=\'Z\')//ver si es una letra (may o minuscula)
{
letra=texto[i];
letra=letras[i];
}
else if (texto[i]>=\'0\' && texto[i]<=\'9\')// ver si es numero
{
numero=texto[i];
numero=numeros[i];
}
}
cout<<letras<<numeros<<endl;
}




kike
11 de Diciembre del 2005
en lugar de guardar el texto en la variable letra o numero, guardalo en los arrays

#include <iostream.h>
#include <string.h>
#include <ctype.h>//para usar isdigit() y isalpha()
#include <stdlib.h>//para usar atoi()
void main (void)
{
//declaraciones
int longitud, numero, letra;
numero=letra=0;//iniciar contadores a 0
int numeros[100];
char texto[100];
char letras[100];
//obtener cadena del usuario
cout<<\"Escriba un texto con letras y numeros mezclados: \"<<endl;
cin.getline (texto,100);
//fijar longitud de texto en variable
longitud=strlen(texto);
//bucle para clasificar los caracteres en numeros y letras
for (int i=0;i<longitud;i++)
{
//si es una letra guarda en array letras y sube contador
if(isalpha(texto[i]))
{
letras[letra]=texto[i];
letra++;
}
//si es un numero lo guarda en el array numeros y sube contador
if(isdigit(texto[i]))
{
numeros[numero]=atoi(&texto[i]);
numero++;
}
}

ahora le pones un bucle para mostrar cada array (letras y numeros), usando como longitud los contadores (letra y numero).
}

novato
11 de Diciembre del 2005
Muchas gracias a los dos por contestar.

keyMaker: nose que pasa pero no me funciona el programa con las correcciones que has hecho :(, por que puede ser??

kike: nunca habia usado arrays, (acabo de mirar un manual que tengo, no sabia ni lo que eran). Por cierto, para que sirve el comando "atoi"??? no lo entiendo, y el bucle final como se haria??

estoy muy verdeeee


GRACIAS

ISAIAS DUQUE GOMEZ
11 de Diciembre del 2005
ATOI CONVIERTE UNA CADENA A ENTERO

ej:

char cadena[4]="hola";
int n;

n=atoi(cadena);
printf("la cadena es %d",cadena);

bytes

Novato
11 de Diciembre del 2005
Gracias ISAIAS DUQUE GOMEZ.
Por favor necesito mas ayudaaa, sigo sin hacer que me funcione el dichoso programa.

kike
11 de Diciembre del 2005
ok el bucle que muestra las letras
for(int x=0;x<letra;x++)
cout<<'t'<<letras[x];

entre los dos bucles un fin de linea
cout<<endl;

y el bulce que muestra los numeros
for(int x=0;x<numero;x++)
cout<<'t'<<numeros[x];

n
11 de Diciembre del 2005
Muchas gracias kike, ya me funciona.
;);)

keyMaker
11 de Diciembre del 2005
Yo lo hubiera hacho de otra forma, pero bueno siguiendo tu misma linea, aqui te mando tu propio algoritmao con las correcciones correspondientes.


#include <iostream.h>
void main (void)
{
int longitud, numeros[100];
char texto[100];
char letras[100];

cout<<"Escriba un texto con letras y numeros mezclados: "<<endl;
cin.getline (texto,100);


longitud=strlen(texto);

for (int i=0, int j=0, int k=0; i<longitud; i++){

if ((texto[i]>='a' && texto[i]<='z') || (texto[i]>='A' && texto[i]<='Z'))//ver si es una letra (may o minuscula)
{
letras[j]=texto[i];
j++;
}
else if (texto[i]>='0' && texto[i]<='9')// ver si es numero
{
numeros[k]=texto[i];
k++;
}
}
cout<<letras<<numeros<<endl;
}

Novato
11 de Diciembre del 2005
Me acabo de dar cuenta de que hay un pequeño problemilla:

si introduzco por ejemplo los numeros 1234,
el programa como resultado no me da 1234, sino 1234 234 34 4 :S:S.
El problema esta aqui no?:

//si es un numero lo guarda en el array numeros y sube contador
if(isdigit(texto[i]))
{
numeros[numero]=atoi(&texto[i]);
numero++;
}
Como hacer para que funcione?
gracias