C ++ converter de 1 char para string? [fechadas]


121

Eu preciso converter apenas 1 charpara string. O caminho oposto é bem simples str[0].

O seguinte não funcionou para mim:

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.

3
Não é possível reproduzir: coliru.stacked-crooked.com/…
chris

10
O que faz você pensar string(1, c)que não funciona? Essa é a maneira certa de fazer isso.
templatetypedef

1
Qual compilador você está usando? Que ambiente. Talvez isso seja um bug do seu compilador.
Maurice Reeves

libc ++ abi.dylib: terminate chamado lançando uma exceção
weeo

3
@ weeo- O erro provavelmente está em outro lugar do seu programa. Poste um exemplo reproduzível e independente que demonstre o erro para que possamos ajudá-lo a descobrir o que está errado.
templatetypedef

Respostas:


184

Tudo de

std::string s(1, c); std::cout << s << std::endl;

e

std::cout << std::string(1, c) << std::endl;

e

std::string s; s.push_back(c); std::cout << s << std::endl;

trabalhou para mim.


4
O caminho mais curto é: string s = “” + c;
doctorram

17
@doctorram NO! 1. as aspas que você está usando são C ++ inválidas; 2. mesmo se você quis dizer s = "" + cque é apenas UB, porque não significa "concatenar a cadeia vazia com o caractere c", significa "o ponteiro para alguma cópia de uma cadeia vazia, avançado pelo valor numérico c(que definitivamente não é o que você deseja"). 3. se você quis dizer s = ""s + c, ainda é mais longo do que s{1, c}... (e você teria que escrever em using std::literals;algum lugar ... #
303

11
Desculpe, eu quis dizer: string s = string () + 'a';
doctorram

1
I can'r remover o upvote em que o comentário errado ...
Jake OPJ

10

Sinceramente, pensei que o método de fundição funcionaria bem. Como não, você pode tentar o fluxo de string. Um exemplo está abaixo:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
Eu não acho que o fato de esse construtor de cadeias de caracteres em particular não estar funcionando tenha algo a ver com o problema real.
chris

1
Provavelmente está certo, mas pensei que eu ia oferecer a resposta fácil: P
Mallen

Esta solução funciona, no entanto, o uso de stringstream ( <sstream>) não é necessário, pois incluirá toda a biblioteca no projeto, retardando o processo de compilação. Tente evitar incluir dependências desnecessárias no seu projeto.
Cristian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.