Convertir 'numero' a numero en c++

Aziwar

Buenas! Como puedo convertir un número representado en char/string de más de una cifra a entero?

Cuando es de una sola cifra hago char - '0' y ya está. Pero al tener 2 chars distintos, no se como juntarlos para formar un único número.

bLaKnI

usa std::sstream

#include <sstream>

por ejemplo:

char* string = "532";
std::istringstream ss(string);
int i;
ss >> i;

O otro muchisimo mejor:

String to int conversion:

To perform the opposite operation and convert a string to int, you simply reverse the insertion and extraction operations. For example:

string result= “10000”;
int n=0;
stream << result;
stream >> n; // n equals 10000

http://www.builderau.com.au/program/java/soa/Facilitate-type-conversions-with-stringstream-objects/0,339024620,320272027,00.htm

Aps! y pon por ahí arriba un "using namespace std".
Siempre va bien si trabajas con strings, maps, vectors, streams y sucedáneos...

dagavi

#1 Si te dan un número formado por varios dígitos: '12345'

1 -> 10 -> 12 -> 120 -> 123 -> 1230 -> 1234 -> 12340 -> 12345

No te debería de dar ningún problema el verlo, es que es bastante obvio e imediato:
Si sabes "traducir" un dígito: '1' -> 1, y '2' -> 2, es inmediato ver que 110 + 2 = 12, y que 1210 + 3 = 123...

PD: #2 Si esto fuera para un ejercicio de alguna asignatura y le presentas eso a un profesor, este debería de tener la obligación de mandar a la mierda al alumno, ya que lo que se hace en estas asignaturas no es "aprender a usar un lenguaje de programación" si no, una vez conoces las cosas básicas, intentar desarrollar algoritmia, y aquí está claro que hace falta si en un ejercicio tan trivial no se le ocurre una solución (que poco tiene que ver con "programar en X lenguaje", es más, por esta regla de 3 le pones ahora Java y ya no sabrá hacerlo, ya que no tendrá el sstream, aprenderá el Integer.parseInt() le pasas a Python y de nuevo a aprender...)

BLZKZ

y si lo hace con la funcion atoi?

o..

#include <sstream>
#include <string>
std::string text = "152";
int number;
std::istringstream ss( text );
ss >> number; 
dagavi

Pues si es un ejercicio que le han mandado pues es lo que he comentado en el PD anterior.*

Es como si te mandan un ejercicio de ordenar vectores y vas to chulo y le haces:
sort(vec);

Aunque la que le das tu es exactamente lo mismo que le está diciendo #2 -.-

*Aunque nunca ha dicho que sea un ejercicio que le han mandado, pero igualmente es algo básico.

Aziwar

Es un ejercicio, pero no es lo importante eso, si no manejar polinomios. Con lo de #2 está bien (ya lo había usado en otra práctica y no me acordaba xDDD).

Atoi no sirve, porque atoi no es estándar.

NeB1

En 4 replys y nadie le dice que gaste atoi...

Aziwar

Si tengo un fichero en el que cada linea representa un vector, como hago para crear dichos vectores?

set<TPolinomio> TClase :: leer(){
	ifstream fichero;
	fichero.open("polinomios.txt");
	set<TPolinomio> setpolis;
	double vector[N];
	for (int i = 0; i < N; i++)
		vector[i] = 0;
	
string aux;
stringstream aux2;
while (!fichero.eof()){

	getline(fichero, aux, '\n');   
	aux2 << aux;
	for (int i = 0; i < N; i++)
		aux2 >> vector[i];
		
	TPolinomio polinomio(vector, N);
	setpolis.insert(polinomio);
}


return setpolis;
}

Estaba probando algo así, pero solo me hace bien la primera línea, la segunda ya o me la hace mal, o me mezcla datos o cosas así.

Hay algun modo de vaciar el stringstream buffer?

Editado por moderador: acordaros del comando [code]

bLaKnI

Atoi, es una soberana gilipollez. Lo pillan 2 compiladores contados.

En cuanto a lo de "no se que de que ejercicio y algoritmia y tal..."
No se si contestar bordemente o políticamente correctamente...
Haré lo segundo:

  • Si se trata de un ejercicio ESPECÍFICAMENTE de realizar dicha tarea, es cierto, no le puedes clavar el "sort()" de turno.

Pero en ningún momento lo ha especificado, y interpreto que se trata meramente de un bloqueo para una tarea mayor. Así que dejemonos de gilipolleces de "sumar numeritos" para sacar de la string el char que toque y calcular el número pertinente...


En cuanto al segundo problema planteado, el de los vectores, seria bueno que pusieras unas 5 o 6 líneas del fichero, para ver su estructura o simplemente, descríbela, pero con suficientes especificaciones como para no ir pensando en codigos en vano... ;)

dagavi

Mea culpa por pensar que el ejercicio directo podría ser ese (pasar de string a int) o algo muy parecido, pero me hizo pensar en que era el el que tenía que programarlo por:

  • Las fechas cuadran. Por esta época empiezan a venir los nuevos estudiantes de programación a plantear sus dudas (yo mismo lo hice xD)
  • Si no necesita ser una función "suya" es algo que con unsimple "string to int C++" en google te sale el resultado, por eso en ningún momento se me pasó por la cabeza que fuera algo que el pudiera utilizar directamente sin tenerlo que programar, ya que de lo contrario podría haber realizado esa búsqueda y darle el resultado sin tener que esperar a que le contestáramos.
    De mi primer resultado en google
std::string text = "152";
int number;
std::istringstream ss( text );
ss >> number;
#include <boost/lexical_cast.hpp>
std::string text = "152";
int number = boost::lexical_cast< int > ( text );

[/spoiler]

Realmente no quería parecer "borde" en el sentido de "hazlo tu" / "deberías saber hacerlo", si no que pensaba que realmente lo tenía que hacer el (especialmente por el segundo punto comentado) y lo que le estabais comentando no le serviría.

Usuarios habituales

  • dagavi
  • bLaKnI
  • Aziwar
  • NeB1
  • BLZKZ