Lo siguiente falla con el error prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
También probé lo siguiente, que se compila pero se comporta aleatoriamente en tiempo de ejecución:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
Perdón por esta pregunta tonta, pero he buscado en google, lo que pude ver son "char array to char ptr", "char ptr to char array", etc.
Respuestas:
Usaría
+=
operador en lugar de funciones con nombre.fuente
gcc
,basic_string::operator+=
es solo una llamadapush_back
.y
es un enchar*
lugar destd::string
. Agregaríad
caracteres al puntero y.Uso
push_back()
:fuente
Para agregar un carácter a un std :: string var usando el método append, debe usar esta sobrecarga:
Editar: Tienes razón, no entendí el parámetro size_type, que se muestra en la ayuda contextual. Este es el número de caracteres para agregar. Entonces la llamada correcta es
no
O la forma más simple:
fuente
sizeof(char)
lugar de1
? Desea agregar exactamente una repetición ded
, así que solo dígalo. Usarsizeof
aquí es engañoso ya que sugiere que uno tiene que decirappend
el tamaño del byte del tipo de datos utilizado (que no es el caso).Además de los otros mencionados, uno de los constructores de cadenas toma un carácter y el número de repeticiones para ese carácter. Entonces puede usar eso para agregar un solo carácter.
fuente
Pruebo las varias proposiciones ejecutándolas en un bucle grande. Utilicé Microsoft Visual Studio 2015 como compilador y mi procesador es un i7, 8Hz, 2GHz.
Según esta prueba, los resultados son:
Conclusión
+=
parece más comprensible, pero si te importa la velocidad, usa appendfuente
Prueba el operador + = texto del enlace , append () método texto del enlace , o push_back) método ( texto del enlace
Los enlaces en esta publicación también contienen ejemplos de cómo usar las API respectivas.
fuente
El problema con:
es que tienes que tener la 'd' en lugar de usar el nombre de un char, como char d = 'd'; ¿O estoy equivocado?
fuente
char c = 'd'
y puedo hacerloy.push_back(c)
sin problema. Entonces no hay problema constd::string::push_back()
(excepto que es más largo que+=
).Tenga en cuenta que en todos estos ejemplos se podría haber utilizado un literal de caracteres directamente:
y += 'd';
.Su segundo ejemplo casi habría funcionado, por razones no relacionadas.
char d[1] = { 'd'};
No funcionó, perochar d[2] = { 'd'};
habría sido trabajado más o menos lo mismo que (nota la matriz es de tamaño dos)const char* d = "d";
, y una literal de cadena puede ser anexado:y.append(d);
.fuente
Intente usar la d como puntero y.append (* d)
fuente
char
no es una cadena y no tiene un terminador nulo. Hacer esto provoca un comportamiento indefinido.*d
significa puntero de desreferenciad
que es un error de sintaxis yad
que no es un puntero.Tenga en cuenta que he escrito 10u y no 10 para la cantidad de veces que me gustaría agregar el carácter; reemplace 10 con cualquier número.
fuente
Encontré una manera simple ... necesitaba unir
char
una cuerda que se estaba construyendo sobre la marcha. Necesitaba unchar list;
porque le estaba dando una opción al usuario y estaba usando esa opción en unswitch()
declaración.Simplemente agregué otro
std::string Slist;
y configuré la nueva cadena igual al carácter, "lista" - a, b, co lo que el usuario final elija así:La complejidad puede ser genial, pero la simplicidad es más fría. En mi humilde opinión
fuente
También se agrega la opción de inserción, como no se ha mencionado todavía.
fuente
Si está utilizando push_back, no hay llamada para el constructor de cadenas. De lo contrario, creará un objeto de cadena mediante la conversión, luego agregará el carácter de esta cadena a la otra cadena. Demasiados problemas para un personaje pequeño;)
fuente