Ayudita con mi duda de C++

Soltrac

Vereis, me he propuesto aprobar este año por fin C++ en septiembre y toy haciendo chorron de examenes de años anteriores y me he parado en 1 duda q siempre me cae en examenes.

Quiero hacer una conversion de char* a int...es posible?
Explico.. el programa es del tipo "programa -45", es decir que recibe un parametro -4 q tengo q actuar como el, pero necesito usarlo como un int 45 y claro, eso es el argv[1] q no es ni mas ni menos q un char*. Yo quiero saber si la conversion es posible de alguna manera.

Para los q no os hayais enterao...el programa recibe como parametro un '-' seguido de un numero y yo necesito usar ese numero, el problema es q ese -numero es un char* (una cadena de caracteres)...

Si alguien sabe algo, le estaria muy agradecio y si me ayuda a aprobar C++ por dios q le invito a unas cañas y una cena!!!! XD

S

#include <stdlib.h>
int atoi(const char *nptr);

Es una llamada POSIX, si trabajas en Windows no tengo claro que funcione.

_dekan_

a tu pregunta de si puedes convertir un char* a int, sí, pero usando una función de stdio.h:

int atoi(const char *nptr);

en http://man.he.net/man3/atoi tienes una explicación, en inglés, eso sí.

a la segunda pregunta, al menos entiendo que lo es, yo nunca he usado parámetros en main, pero viendo que la declaración es:

int main(int argc, char *argv[]);

el - será argv[0], el 4 será argv[1] y el 5 argv[2] ;)

EDITADO: lol, se me adelanto uno

espero q t ayude, yo empiezo carrera este año ^^ (informática de sistemas)

EDITADO2: sip, funciona con windows, yo lo he usao y no da problemas

S

El argv es un vector de punteros a cada uno de los argumentos. El vector acaba cuando te encuentras un null. También puedes usar el argc (argument count), pero me parece menos elegante.

#5 Se supone que la llamada omite todos los caracteres no numéricos. De todos modos siempre podrás pasar *char + sizeof (char) al atoi() para saltarte el guión.

Soltrac

Ok la encontre yo tb...gracias por las respuestas...ahora viene la repera :D:

Hay una funcion para quitarle el - de delante? Es decir q me transforme el char* -45 a int 45 p ej.

xDDD a este paso aprobare y to jeej.

EDitado: podria crearme otro char* desde el [1] y asi ignorar el [0] q es el el '-' hasta el final pero donde esta el final? pq q yo sepa...un char* tiene el problema q puede haber desbordamiento y no tengo manera de...saber donde acaba pq yo no se si sera -45 o -43242343 o -1, no se si me explico.

_dekan_

pos yo creo q si creas un puntero q contnga la el argumento entero, q kede tal q char* loqsea = "-45" y le haces loqsea++ y luego un strcpy dberia copiartelo dsd el 45, o algo así. la verdad es q hace pila q no trabajo cn c así q mucho d lo q digo son recuerdos un tanto lejanos :P

Soltrac

Bingo dekan :D

char* a("-45");
++a;
int as=atoi(a);
cout << as;

Y sale 45 :D thanks :D

S

#7 Un carácter puede no tener el tamaño de un byte (si no es ASCII, claro). Suma sizeof (char) en vez de 1 para asegurar la correctitud.

_dekan_

bueno eso, me inclino ante ti xD toi bastante verde

Soltrac

Ok #9...se cambia y punto :D

Gracias a ambos por la ayuda jejej

S

En mi facultad a veces entregas prácticas en máquinas de 64bit, que se compilan con soporte UTF8 en lugar de ASCII u otras cosas que rompen el "standard". Lo que hay que hacer es generalizar al máximo para evitar este tipo de problemas.

_dekan_

oye, y ya q tamos, q carreras y años estais estudiando??

Soltrac

No voy a abrir otro post...pq me ha surgido otra duda :D

Veamos...sigo haciendo exameens pasados y tengo otra duda:

Tengo una clase del tipo

template <class T> class lista {
public:
lista(): l(0) {}
...
const T& primero()
const lista& resto()
private:
listaPropia<T>* l;
};

listaPropia es otra clase q no hace falta definir.

Mi problema viene cuando kiero acceder al resto, si este no existe pq la lista sea de un elemento y me de un segmentation default. No puedo acceder a la parte privada. ¿Hay alguna manera posible? Si algo no kedo claro..pos me lo preguntais jeejej. No se puede acceder a la parte privada pq si no haria if(l) pero el encabezao me pide q no use parte privada de la clase. Yo creo q la cosa esta en la definicion en lista(), si hubiera alguna manera de poner q la lista que devuelve resto no apunte a nada o algo asi...no se yo XD

NoSHeL

ingenieria tecnica informatica de sistemas :O y toi en segundo, pero rayao del puto pascal
es muy triste q tenga q estudiar C por mi cuenta, pero weno

switch

la lista no tiene algún método q devuelva el nº de elementos? En plan:

if (milista.contar() > 0)
{
const lista & resto = milista.resto();
...
}

Tb hay más maneras...

Carcass

#15 El Pascal está hecho para aprender, es normal que lo usen en la universidad. Y ya te darán C, como a todos... :-P

NoSHeL

me lo dan, pero en una optativa de 1 cuatrimestre, y es C, no C++ , asi q vaya mierda
hasta mi hermano en teleko dio java :P

darkange

Aclarar el tema de los argumentos en C.
argc indica el numero de argumentos, que siempre sera 1 o mas.
argv[0] es una cadena de caracteres que indica el nombre del ejecutable
argv seran los argumentos en forma de cadenas de caracteres.

Por tanto, si tu llamas a "programa -45"
argc = 2
argv[0] valdra "programa"
argv[1] valdra "-45" en forma de cadena de caracteres.

Por tanto, argv es un array de arrays de caracteres.

Si llamas "programa -45 hola pepe" quedara:
argc = 4
argv[0] = "programa"
argv[1] = "-45"
argv[2] = "hola"
argv[3] = "pepe"

Saludetes.

Editado: Añadir que al final de cada argv esta el caracter 0, delimitador de las cadenas de caracteres, por lo que puedes manejarlo como cualquier cadena.

Carcass

#18 Pues a mí me dieron C y C++ obligatorio. Y Java también.

Soltrac

Bueno ya hice el examen ya os contare lo q he sacao :P

De todas maneras lo q enseñan en cada universidad es un mundo.

En la UCA enseñan C y C++ y luego como optativas tienes PROLOG y C++ visual (usando Borland C++).

Aki no hay java ni pascal ni nanananan. Es un mundo pero es lo q digo...si tu sabes por ejemplo programacion estructurada...con q te sepas un poco de sintaxis de otro lenguaje es suficiente.

Bueno q eso q gracias a todos jejej. A ver q tal..el examen basicamente fueron excepciones una clase q implementaba una cadena de caracteres de bajo nivel, un programa q usaba un map y un programa de ordenacion mirando iteradores :P

Usuarios habituales

  • Soltrac
  • Carcass
  • darkange
  • NoSHeL
  • switch
  • _dekan_
  • Soy_HeatoN