Logo Hardware.com.br
JoaoVilelaDavila
JoaoVilelaDa... Novo Membro Registrado
1 Mensagem 0 Curtidas

Concatenar strings em C

#1 Por JoaoVilelaDa... 21/09/2021 - 16:10
Pessoal, estou tentando concatenar strings em C, porém minha cabeça ta pegando fogo e não estou conseguindo.

Por enquanto ele esta me retornando as duas strings concatenadas, porém ao fazer a contagem de caracteres, ele só conta da primeira string e não do resultado das duas concatenações.

#include <stdio.h>


int tamanhoString(char string[]){
int numCarac = 0;
while(string[numCarac] != '\0'){
++numCarac;
}
--numCarac;
return numCarac;
}

//Você deverá modificar apenas a função abaixo, você
//não pode modificar a assinatura dela
int concatena(char* s1, char* s2, char* sres, int* espacos){

//preciso descobrir o tamanho da string s1 e s2 para passar pra função de baixo
//Ta retornando certinho o tamanho das strings, o problema não está aqui
int t1 = tamanhoString(s1);
int t2 = tamanhoString(s2);
printf("A primeira string possui %i caracteres e a segunda %i caracteres\n", t1,t2);//Pra verificar o tamanho das strings


//Pra concatenar
int i, j;

for(i = 0; i < t1; ++i){
sres[i] = s1[i]; //--> Escreve em sres o s1 até i < t1 ==> T1 é o tamanho da string s1(palavra1)
}

for(j = 0; j < t2; ++j){
sres[t1 + j] = s2[j];//--> Era pra escrever logo depois, pois escreve em sres o s2 pulando a quantidade de t1
}

}



//Funcao para imprimir uma string, NÃO MODIFIQUE
void print_string(char* str){
int k = 0;
while(str[k] != '\0'){
printf("%c", str[k]);
k++;
}
printf("\n&quot;
}

//NÂO MODIFIQUE a main
int main(int argc, char * argv[]){
char frase1[40];//--> Passar a frase pra esse vetor
char frase2[40];//--> Passar a frase pra esse vetor
char fraseResultado[80];//--> frase concatenada
int tamResultado;
int espacos;
//lendo a entrada
fgets(frase1, 40, stdin);
fgets(frase2, 40, stdin);
tamResultado = concatena(frase1, frase2, fraseResultado, &espacos);
print_string(fraseResultado); //Printa a fraseresultado, vindo da sres
printf("String com %d caracteres e %d espacos.\n", tamResultado, espacos);
return 0;
}
}
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
22/09/2021 - 09:47
Olá, @JoaoVilelaDavila, seja muito bem-vindo à Comunidade Guia do Hardware.

Bom, você criou a "fraseResultado" com 80 caracteres, insere nela a concatenação mas não a finaliza neste ponto. Então com isso, ao imprimi-la no final um montão de lixo vai aparecer, desfigurando o seu resultado.
- Sorte sua, tratar isto é muito simples:
[code=c]sres[t1+j] = '\0';[/code]

Adicione essa linha depois do último loop de "concatena" e esse problema estará resolvido.

Finalmente, respondendo a sua pergunta, a contagem mede qualquer coisa porque você esqueceu de capturar o total da sua concatenação. confused.png
Observe que "concatena" deve retornar um numeral do tipo "inteiro", o que faltou fazer é inserir como última linha:
return (t1+j);


boa.gif É isso!
PS: não vai esquecer os espaços ... gnomo.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal