c++ - array - Conversión preferida de char(not char*) a std:: string
string to char c++> (4)
Aún puedes usar el constructor de cadenas tomando dos iteradores:
char c = ''x'';
std::string(&c, &c + 1);
Actualizar:
Buena pregunta James y GMan. Simplemente busqué "The New C Standard" de Derek M. Jones para descargar "pointer past" y mi primer hit fue:
Si la expresión P apunta a un elemento de un objeto de matriz y la expresión Q apunta al último elemento del mismo objeto de matriz, la expresión de puntero Q + 1 se compara con mayor que P ... aunque Q + 1 no apunta a una elemento del objeto matriz ...
En las arquitecturas segmentadas, el aumento de un puntero más allá del final de un segmento hace que la dirección envuelva la arquitectura segmentada al principio de ese segmento (generalmente, la dirección es cero). Si se asigna una matriz dentro de dicho segmento, la implementación debe garantizar que haya espacio después de la matriz para que haya una más allá de la dirección final, o utiliza alguna otra técnica de implementación para manejar este caso (por ejemplo, si el segmento utilizado es parte de la representación de un puntero, podría asignarse uno especial más allá del valor del segmento final) ...
El modelo de operador relacional de C permite que los punteros a los objetos se traten de la misma manera que los índices en los objetos de matriz. Las comparaciones relacionales entre índices en dos objetos de matriz diferentes (que no son ambos subobjetos de un objeto más grande) rara vez tienen algún significado y la norma no define dicho soporte para los punteros. Algunas aplicaciones sí necesitan hacer uso de la información en las ubicaciones relativas de diferentes objetos en el almacenamiento. Sin embargo, este uso no se consideró de utilidad general suficiente para que el Comité especifique un modelo que defina el comportamiento ...
La mayoría de las implementaciones no realizan comprobaciones antes de cualquier operación en valores con tipo de puntero. La mayoría de los procesadores utilizan las mismas instrucciones para realizar comparaciones relacionales que involucran tipos de punteros como los que se usan para los tipos aritméticos. Para los procesadores que utilizan una arquitectura de memoria segmentada, un valor de puntero a menudo se representa mediante dos componentes, un número de segmento y un desplazamiento dentro de ese segmento. Una consecuencia de esta representación es que hay muchos beneficios en la asignación de almacenamiento para objetos, de manera que se ajuste dentro de un solo segmento (es decir, el almacenamiento para un objeto no abarca un límite de segmento). Un beneficio es una optimización que involucra el código de máquina generado para algunos de los operadores relacionales, que solo necesita verificar el componente de compensación de segmento. Esto puede llevar a la situación en la que p> = q es falso, pero p> q es verdadero, cuando p y q apuntan a objetos diferentes.
Tengo un personaje, un personaje simple y antiguo, que me gustaría convertir en un std::string
. std::string(char)
no existe, por supuesto. Podría crear una matriz de caracteres y copiarla, podría pasar por secuencias de cadenas o por muchas otras pequeñas rotondas. Actualmente, prefiero boost::lexical_cast
, pero incluso eso parece demasiado detallado para esta simple tarea. Entonces, ¿cuál es la forma preferida?
Esto funciona en gcc C ++ 4.9.2 ( http://ideone.com/f3qhTe )
#include <iostream>
using namespace std;
int main() {
// your code goes here
std::string test;
test = (char) 76;
test += (char) 77;
test += (char) 78;
test += (char) 79;
std::cout << "test contains: " << test << std::endl;
return 0;
}
solo usa la sobrecarga que lleva un char?
es decir, string(1, ''A'')
std::string
tiene un constructor que toma un número y un carácter. El personaje se repetirá por el número de veces dado. Por lo tanto, debe utilizar:
std::string str(1, ch);