Sobre la lectura de variables...

Iniciado por amchacon, 10 Marzo 2014, 20:49 PM

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

amchacon

Buenas.

Suponte, que quiero leer los números:
Citar2 5

Yo haría:
Código (cpp) [Seleccionar]
int numero,numero2;
cin>>numero>>numero2;


Y perfecto. ¿Pero que pasaría si hubiese una coma en lugar de un espacio?
Citar2,5

¿Como cambio el delimitador de cin para poder leerlos directamente?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#1
Cita de: amchacon en 10 Marzo 2014, 20:49 PM
Buenas.

Suponte, que quiero leer los números:
Yo haría:

Código (cpp) [Seleccionar]
int numero,numero2;
cin>>numero>>numero2;


Y perfecto. ¿Pero que pasaría si hubiese una coma en lugar de un espacio?
¿Como cambio el delimitador de cin para poder leerlos directamente
?



No sé si es un caso aislado o es una lectura fija, como por ejemplo en la introducción de coordenadas. Si es este último caso valdría:

Código (cpp) [Seleccionar]

.....................................
char ch;
int numero,numero2;
cin>>numero>>ch>>numero2;
cout << numero<<"  "<<numero2<<endl;
..................................



¡¡¡¡ Saluditos! ..... !!!!





amchacon

Eso no funcionaría porque el primer cin lee hasta el espacio. Y como no hay espacio leeria los dos numeros del tirón.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en 11 Marzo 2014, 01:58 AM
Eso no funcionaría porque el primer cin lee hasta el espacio. Y como no hay espacio leeria los dos numeros del tirón.

No, pruébalo que funciona. La variable ch se "come" la coma y cada número estará en su sitio. A mí me funcionó.

¡¡¡¡ Saluditos! ..... !!!!



amchacon

Anda xD. Pues si.

Asi que solo había que cargarse la coma, me estoy volviendo viejo ;D

¡Gracias! ^^
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Yoel Alejandro

#5
Hola!!! Bueno, en C++ no conozco un método que no sea el propuesto por leosansan.

Pero hurgando en los papeles encontré una función de biblioteca de C llamada strtok() (requiere <string.h>) que me despertó curiosidad. Funciona precisamente en casos como éstos, su finalidad es "dividir una cadena en componentes léxicos". Sea la cadena s1, que se quiere dividir en componente léxicos, por medio de un token separador dado por la cadena (no carácter) s2. Entonces la llamada

strtok(s1, s2);

extrae de s1 el primer componente léxico, hasta llegar al token delimitador (o al final de s1 si no se encontró dicho delimitador). La función devuelve una cadena que corresponde al componente extraído. Las llamadas subsiguientes a strtok() deben hacerse con NULL como primer argumento, y de allí en adelante se siguen extrayendo los siguientes componentes de la cadena, devolviendo NULL cuando no existan más de ellos.

En el ejemplo a continuación el usuario introduce cualquier secuencia como "1,2,3,4", y el programa devuelve las distintas divisiones encontradas de la cadena, según el delimitador ","

Código (cpp) [Seleccionar]

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main() {

char buf[101];
char *s;

scanf( "%s", buf );

if ( ( s = strtok( buf, ",") ) != NULL )           /* primer componente */
printf( "%s\n", s );
while ( ( s = strtok( NULL, ",") ) != NULL )  /* restantes, hasta llegar al final */
printf( "%s\n", s1 );
}


===========================================
(EDITO)

A propósito del tema, estaba revisando que la función strtok(char* s1, const char *s2) acepta en s2 una cadena donde cualquiera de sus caracteres puede funcionar como delimitador. Esto puede aumentar la potencia del programa, por ejemplo si s2=",." entonces cualquiera de los caracteres coma o punto será un delimitador. El programa con la entrada "1,2.3.4" separará en 1, 2, 3, 4
Código (cpp) [Seleccionar]

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main() {
   
   char buf[101];
   char *s1;
   
   scanf( "%s", buf );
   
   if ( ( s1 = strtok( buf, ",.") ) != NULL )
      printf( "%s\n", s1 );
   while ( ( s1 = strtok( NULL, ",.") ) != NULL )
      printf( "%s\n", s1 );
}


NOTA. No funciona el espacio como separador debido a scanf(). Si se reemplaza por fgets() sí lo podría aceptar.
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)