Ir ao conteúdo

C concatenar string sem a string.h


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

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;
}

 

Postado

@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.

 

Postado

@.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".

Postado
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
  • Membro VIP
Postado
17 minutos atrás, sweetcandy disse:

a questao pede p que eu nao use nada da string.h

Não é pra você usar a strcat mas sim você saber como ela foi feita [por aquele carinha] ... Mas td bem... abç

  • Curtir 1
  • Solução
Postado
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
Postado
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

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