Ir ao conteúdo
  • Cadastre-se

C concatenar string sem a string.h


sweetcandy
Ir à solução Resolvido por Midori,

Posts recomendados

Gente, é o seguinte, eu to tentando concatenar duas strings, mas nao pode usar nenhuma funçao da string.h, mas ok, até aí consegui, so que ele recebe as strings mas continua em um loop, e não imprime nada quando chamo a função.

#include <stdio.h>
#include <stdlib.h>

void concatena(char *str1, char *str2){
    int i, j;

    for(i=0; str1[i]!='\0';i++){
        
    }
    for(j=0; str2[j]!='\0';j++, i++){
        
        str1[i]=str2[j];
        
    }
    str1[i]='\0';
}

int main()
{
    char str1[50], str2[50];
    char concatenacao;
    printf("Digite a primeira palavra:\n");
    scanf("%s", str1);
    printf("Digite a segunda palavra:\n");
    scanf("%s", str2);
    
    concatenacao = concatena(str1, str2);
    printf("Concatenacao = %d\n", concatenacao);

    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@sweetcandy  Nos loops você está fazendo duas atribuições nas variáveis inteiras. O primeiro p.ex está assim,

 

for(i=0; i=str1[i]!='\0';i++)

 

Na parte do teste remova a atribuição i = str1 e deixe apenas str1[i]!='\0'.

 

Corrija o scanf também que está usando %c quando devia ser %s.

 

Link para o comentário
Compartilhar em outros sites

@.if ahh eu vi, mas a questao pede p que eu nao use nada da string.h :c, mas mesmo assim mt obrigada ❤️

@Midori ahhh, era isso também, editei ali, mas tipo, ele saiu desse loop agora, mas ele para a execução e não mostra a concatenação, tentei colocar um printf mas diz assim "valor vazio não ignorado como deveria ser".

Link para o comentário
Compartilhar em outros sites

53 minutos atrás, sweetcandy disse:

Gente, é o seguinte, eu to tentando concatenar duas strings, mas nao pode usar nenhuma funçao da string.h, mas ok, até aí consegui, so que ele recebe as strings mas continua em um loop, e não imprime nada quando chamo a função

 

E você conseguiu o que então?

 

// ...

for(i=0; i=str1[i]!='\0';i++){
        // ...

 

Pra que usar '\0' ao invés do simples ZERO, 0, que é a mesma coisa?

 

void concatena(char *str1, char *str2);

 

Isso não está formalmente errado, mas nem sempre é o que se espera... Qual o propósito? Se você tem uma função com esse nome? Contatenar:

 

  • a primeira na segunda string
  • a segunda na primeira string
  • retornar uma nova string resultado da concatenação

 

qual a expectativa? O provável é a terceira, mais prática, declarando

 

char* concatena(char *str1, char *str2);

 

Mas você não fez isso, já que declarou a função retornando void.

 

No entanto podia ter escrito o mais genérico

 

char* concatena(char *str1, char *str2, char* destino);

 

retornando o óbvio: a nova string em destino e como valor de retorno TAMBÉM.

 

Mas se usou apenas as duas strings deve retornar o valor em uma delas e o normal em português quando se pensa em concatenar é concatenar na segunda e não na primeira string: concatenar a em b, por exemplo, se diria.

 

E você bem que podia usar um comentário para dizer o que são os argumentos.

 

E entenda que é frágil escrever assim porque não há como garantir que a string resultante tenha o tamanho necessário.  Ou mesmo que seja possível escrever no espaço dela...

 

TESTE sempre o retorno de scanf()! Se não leu nada vai concatenar o que?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução
2 horas atrás, sweetcandy disse:

@Midori ahhh, era isso também, editei ali, mas tipo, ele saiu desse loop agora, mas ele para a execução e não mostra a concatenação, tentei colocar um printf mas diz assim "valor vazio não ignorado como deveria ser".

Você pode usar o printf com str1 depois de chamar a função concatena,

 

printf("Concatenacao = %s\n", str1);

    

 

Remova esta atribuição,

concatenacao = concatena(str1, str2);

 

E deixe apenas: concatena(str1, str2);

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

void concatena(char *str1, char *str2);

Esse "jeitinho" é só mais um entre outros, em especial, é o que seu "empregador" precisa e o único que importa: str1 será a soma das parcelas [str1, str2] e para operação bem sucedida o conjunto str1 precisa de no mínimo capacidade extra igual str2.

 

Outro protótipo.

void concatena(char *str1, const char *str2);

O 'const' é a indicação [prévia] de que somente a primeira parcela [str1] sofrerá mudança. Nesse procedimento [igual ao anterior] não é necessário o retorno de str1. No corpo do método há cópia em str1 de str2 ou, no final do procedimento, antes onde str1 terminava agora há str2.

 

Logo se diz que: str1 concatena com str2.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!