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.
weeo
fonte
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.

Massa
fonte
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;
Mallen
fonte
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