O seguinte falha com o erro 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;
}
Eu também tentei, o seguinte, que compila, mas se comporta aleatoriamente em tempo de execução:
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
Desculpe por esta pergunta idiota, mas eu pesquisei no google, o que eu pude ver são apenas "char array to char ptr", "char ptr to char array", etc.
Respostas:
Eu usaria
+=
operador em vez de funções nomeadas.fonte
gcc
,basic_string::operator+=
é apenas uma chamadapush_back
.y
for um emchar*
vez destd::string
. Adicionariad
caracteres ao ponteiro y.Use
push_back()
:fonte
Para adicionar um caractere a um std :: string var usando o método append, você precisa usar esta sobrecarga:
Edit: Você está certo Eu entendi errado o parâmetro size_type, exibido na ajuda de contexto. Este é o número de caracteres a serem adicionados. Portanto, a chamada correta é
não
Ou a maneira mais simples:
fonte
sizeof(char)
vez de1
? Você deseja anexar exatamente uma repetição ded
, então diga isso. O usosizeof
aqui é enganoso, pois sugere que é preciso informarappend
o tamanho de byte do tipo de dados usado (o que não é o caso).Além dos outros mencionados, um dos construtores de string recebe um caractere e o número de repetições para esse caractere. Então você pode usar isso para acrescentar um único caractere.
fonte
Testo as várias proposições executando-as em um loop grande. Eu usei o microsoft visual studio 2015 como compilador e meu processador é um i7, 8Hz, 2GHz.
De acordo com este teste, os resultados são:
Conclusão
+=
parece mais compreensível, mas se você se importa com velocidade, usefonte
Experimente o operador + = texto do link , append () Método texto do link , ou push_back () Método texto do link
Os links nesta postagem também contêm exemplos de como usar as respectivas APIs.
fonte
o problema com:
é que você precisa ter o 'd' em vez de usar o nome de um caractere, como char d = 'd'; Ou eu estou errado?
fonte
char c = 'd'
e posso fazery.push_back(c)
sem problemas. Portanto, não há nenhum problema comstd::string::push_back()
(exceto que é mais longo que+=
).Note-se que em todos esses exemplos você poderia ter usado um literal de caracteres diretamente:
y += 'd';
.Seu segundo exemplo quase teria funcionado, por razões não relacionadas.
char d[1] = { 'd'};
fez não trabalho, maschar d[2] = { 'd'};
(nota a matriz é tamanho dois) teria sido trabalhado aproximadamente o mesmo queconst char* d = "d";
e um literal de cadeia pode ser anexada:y.append(d);
.fonte
Tente usar d como ponteiro y.append (* d)
fonte
char
não é uma string e não tem um terminador nulo. Fazer isso causa comportamento indefinido.*d
significa desassociar o ponteiro,d
que é um erro de sintaxe, poisd
não é um ponteiro.Observe que escrevi 10u e não 10 para o número de vezes que gostaria de acrescentar o personagem; substitua 10 por qualquer número.
fonte
Eu encontrei uma maneira simples ... Eu precisava prender
char
uma corda que estava sendo construída rapidamente. Eu precisava de umchar list;
porque estava dando ao usuário uma escolha e usando essa opção em umaswitch()
declaração.Simplesmente adicionei outra
std::string Slist;
e defina a nova string igual ao caractere "list" - a, b, c ou o que o usuário final escolher assim:A complexidade pode ser fria, mas a simplicidade é mais fria. Na minha humilde opinião
fonte
Também adicionando a opção de inserção, como ainda não mencionado.
fonte
Se você estiver usando o push_back, não há chamada para o construtor de cadeias. Caso contrário, ele criará um objeto de string por meio de conversão e, em seguida, adicionará o caractere nessa string à outra string. Muitos problemas para um personagem minúsculo;)
fonte