Anuncios Google

[AYUDA] Problema con "strings" y datos...

Hola a todos, bueno, mi problema es este:

tengo un ciclo for de 0 a 34, y quiero insertar dicho numero en un objeto tipo string, delante de la linea "Linea no."... dentro de un "vector" de dichos objetos...

Algo asi:

vector <string> lineas;// Ya tengo mi vector de strings
 
for (int i = 0; i < 34; i++) { // Mi ciclo de 0 - 14
   lineas.push_back( "Linea no." ); // Es necesario añadir un nuevo objeto string al vector
   // ??? Como hago para agregar el numero de indice al final de la linea de cada objeto de mi vector???
}

Como ven es un problema muy sencillo, pero no encuentro la forma de solucionarlo...

Espero que me puedan ayudar, gracias!!!


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de _Dark_Cloud_

Buenas

El "problema" lo tienes al concatenar el entero con el string, que no sabía que no se podía hacer con el operador +. Aquí lo tienes, además de mostrar cada elemento tras añadirlo.

#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
 
int main(){
    vector <string> lineas;
    lineas.resize(34); // Tienes que asignar un tamaño al vector dinámico
    char numstr[21]; // Auxiliar para convertir el int a string
    string base = "Linea no. "; // String base
 
    for (int i = 0; i < lineas.size(); i++){
        sprintf(numstr, "%d", i); // int to string y lo almacenamos en numstr
        lineas[i] = base + numstr; // Ahora sí, concatenamos con la base
        cout << lineas[i] + "\n"; // Imprimimos el elemento del vector
    }
 
    return 0;
}



¡Visca el Barça y Viva España!

Imagen de joserc87

Si ya usas sprintf, para que usar el +?

#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
 
int main(){
    vector <string> lineas;
    lineas.resize(34); // Tienes que asignar un tamaño al vector dinámico
    char numstr[21]; // Auxiliar para convertir el int a string
 
    for (int i = 0; i < lineas.size(); i++){
        sprintf(numstr, "Linea no. %d", i); // int to string y lo almacenamos en numstr
        lineas[i] = numstr;
        cout << lineas[i] + "\n"; // Imprimimos el elemento del vector
    }
 
    return 0;
}

Ambos códigos son equivalentes. Yo simplemente he eliminado el string base y la operación de suma que no hace falta.

Saludos.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de _Dark_Cloud_

Buenas

Sé que son equivalentes, quería recalcar cuando se puede usar el operador + y cuando no, pero bueno, así es más resumido.

Salu2.

Imagen de arielnmz

Gracias, sus respuestas son

Gracias, sus respuestas son buenas, y si, ya habia pensado en usar el sprintf, pero el problema es que no se sabe cuanto medira la cadena con datos en formato (en el ejemplo me sirve 21, pero pueden ser 3, 4 o 99999... no se sabe... y no puedo desperdiciar RAM tampoco... Tambien use otro metodo:

vector <string> lineas; // Mi vector de lineas
stringstream aux; // El stringstream auxiliar
 
for (int i = 0; i < 34; i++) {
   lineas.push_back("Linea no."); // Agrego un nuevo "string" a mi vector...
   aux.str( lineas[i] ); // El objeto "stringstream" auxiliar apunta al "string" que acabo de crear...
   aux << i; // Inserto datos con formato...
   // aux.flush(); // Volcar explicitamente los datos al stream
}

El problema con este es que siempre guarda uno menos que lo que debe... (si mi ciclo es de 0 - 34, solo guarda numeros del 0 - 32, si es de 0 - 35, guarda 0 - 33, etc...) Incluso volcando el buffer explicitamente con flush()...

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.