En C++, ¿cuál es la forma más sencilla de convertir un vector de ints (es decir, vector<int>
) en una cadena?Conversión de un vector a cadena
Respuesta
Tal std::ostream_iterator
y std::ostringstream
:
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> vec;
vec.push_back(1);
vec.push_back(4);
vec.push_back(7);
vec.push_back(4);
vec.push_back(9);
vec.push_back(7);
std::ostringstream oss;
if (!vec.empty())
{
// Convert all but the last element to avoid a trailing ","
std::copy(vec.begin(), vec.end()-1,
std::ostream_iterator<int>(oss, ","));
// Now add the last element with no delimiter
oss << vec.back();
}
std::cout << oss.str() << std::endl;
}
Vale la pena señalar que 'vec.end() - 1 'solo está bien definido si uno sabe _de seguro_ que' vec' no está vacío. – ildjarn
@ildjarn: Buen punto. Lo mismo para 'vec.back()'. –
con este enfoque, ¿es posible forzar algún tipo de relleno? por ejemplo, para que todos los números usen 4 posiciones, independientemente de la cantidad de dígitos que tengan –
Aquí es una alternativa que utiliza un iterador de salida personalizado. Este ejemplo se comporta correctamente para el caso de una lista vacía. Este ejemplo muestra cómo crear un iterador de salida personalizado, similar al std::ostream_iterator
.
#include <iterator>
#include <vector>
#include <iostream>
#include <sstream>
struct CommaIterator
:
public std::iterator<std::output_iterator_tag, void, void, void, void>
{
std::ostream *os;
std::string comma;
bool first;
CommaIterator(std::ostream& os, const std::string& comma)
:
os(&os), comma(comma), first(true)
{
}
CommaIterator& operator++() { return *this; }
CommaIterator& operator++(int) { return *this; }
CommaIterator& operator*() { return *this; }
template <class T>
CommaIterator& operator=(const T& t) {
if(first)
first = false;
else
*os << comma;
*os << t;
return *this;
}
};
int main() {
// The vector to convert
std::vector<int> v(3,3);
// Convert vector to string
std::ostringstream oss;
std::copy(v.begin(), v.end(), CommaIterator(oss, ","));
std::string result = oss.str();
const char *c_result = result.c_str();
// Display the result;
std::cout << c_result << "\n";
}
por lo general lo hago de esta manera ...
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
std::vector<char> vec;
//... do something with vec
std::string str(vec.begin(), vec.end());
//... do something with str
return 0;
}
template<typename T>
string str(T begin, T end)
{
stringstream ss;
bool first = true;
for (; begin != end; begin++)
{
if (!first)
ss << ", ";
ss << *begin;
first = false;
}
return ss.str();
}
Ésta es la función str que puede hacer que los enteros se convierten en una cadena y no en un char por lo que el número entero representa. También funciona para dobles.
Estaba confundido su llamada al constructor de cadenas con una llamada a una función llamada str. Druciferre no imprimirá una lista separada de números de coma, intentará convertir los números en un char. – kpgbrink
Lo siento, la pregunta no fue lo suficientemente específica como para saber exactamente lo que quería. No leí los otros comentarios. – kpgbrink
- 1. Vector frente a cadena
- 2. cacao - conversión de un doble a cadena
- 3. Conversión de cadena a entero
- 4. conversión de cadena a numérico
- 5. conversión de cadena estrecha a cadena ancha
- 6. Conversión de un iterador de Scala en un vector
- 7. Conversión de un JToken (o cadena) a un determinado tipo
- 8. Conversión de Unicode a cadena en Java
- 9. conversión de cadena a largo en pitón
- 10. cadena de conversión a long long
- 11. conversión de XML a cadena usando C#
- 12. Cadena de C++ a doble conversión
- 13. Conversión de cadena a puntero para JNA
- 14. C#: Conversión de cadena a Sbyte *
- 15. Conversión de cadena binaria a ASCII correspondiente
- 16. C# cadena de conversión explícita a ENUM
- 17. Conversión de doble a cadena en C++
- 18. Ruby - Conversión de entero a cadena
- 19. conversión de bytes a una cadena C#
- 20. cadena a cadena de matriz de conversión en Java
- 21. Conversión de una cadena a DateTime
- 22. Ruby - cadena de conversión a la fecha
- 23. Hex a cadena de conversión ascii
- 24. Conversión de la cadena Haml a html
- 25. Java: inetaddress a la conversión de cadena
- 26. z3python: conversión de cadena a expresión
- 27. Cadena de conversión Sqlite a la fecha
- 28. Conversión de PDF a la cadena
- 29. Conversión de archivo binario a cadena Base64
- 30. Dividir un vector de cadena en R
¿Una cadena de qué? ¿Cómo piensas convertir cada entero en una cadena? ¿Representan los códigos de caracteres ASCII, o está tratando de construir una lista de números separados por comas? – meagar
¿Cómo desea que se vea la salida? – Mark
Digamos que el vector es: [1, 4, 7, 4, 9, 7], la cadena será "1,4,7,4,9,7" – shn