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;
@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;
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.
string(1, c)
que não funciona? Essa é a maneira certa de fazer isso.Respostas:
Tudo de
e
e
trabalhou para mim.
fonte
s = "" + c
que é apenas UB, porque não significa "concatenar a cadeia vazia com o caracterec
", significa "o ponteiro para alguma cópia de uma cadeia vazia, avançado pelo valor numéricoc
(que definitivamente não é o que você deseja"). 3. se você quis dizers = ""s + c
, ainda é mais longo do ques{1, c}
... (e você teria que escrever emusing std::literals;
algum lugar ... #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:
fonte
<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.