Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

GibaZoro

[Resolvido] Concatenar duas strings quaisquer e informar o número

Recommended Posts

Olá,

estou tendo problemas com o seguinte execício:

A partir de duas strings quaisquer, informar o número de caracteres da concatenação das duas strings.

Obs.1: Estou apanhando da forma do qual o scanf lê strings de tamanho indefinido, não pretendo usar gets(), li que esta função pode trazer problemas na alocação de memória.

Obs.2: Usando a biblioteca <string.h> creio que ficaria mais fácil, porém quero que seja apenas usando ponteiros.

 

Desde já agradeço a atenção!! O código que fiz postei abaixo, mas ele está com muitos erros do qual não estou conseguindo corrigir.

 


#include<stdio.h>
#include<stdlib.h>
int main(){
int n, m, contador1, contador2, total;
char *pstring1, *pstring2;
char string1[n], string2[m];
pstring1 = (char *)(malloc(n*sizeof(char)));// alocar espaço para a string que será informada
	if (pstring1 == NULL){
		printf ("\nErro de alocacao de memoria.");
		return 1;
	}
pstring2 = (char *)(malloc(m*sizeof(char)));// alocar espaço para a string que será informada
	if (pstring2 == NULL){
		printf ("\nErro de alocacao de memoria.");
		return 1;
	}
printf ("Digite uma frase: ");
scanf ("%s",&string1[n]);
printf ("Digite outra frase: ");
scanf ("%s",&string2[m]);
contador1 = 0;
contador2 = 0;
while (*pstring1 != "\0"){// contar os caracteres da primeira string
	if (*pstring1 != " "){
		contador1++;
		pstring1++;
	}
	return contador1;
}
while (*pstring2 != "\0"){// contar os caracteres da segunda string
	if (*pstring2 != " "){
		contador2++;
		pstring2++;
	}
	return contador2;
}
total = contador1 + contador2;
printf ("O total de caracteres nas duas strings eh de: %d ",total);
free (pstring1);
free (pstring2);
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

GibaZoro,

 

A sua alocação dinâmica está errada. Você está alocando as strings com o tamanho definido por "n" e "m".

Só que você se quer inicializou estas variáveis, elas podem ter qualquer valor, até um -52316848925.

 

Mesmo para alocação dinâmica você precisa definir um tamanho. Pois apesar de reservar o espaço apenas em tempo de execução, o compilador não tem como adivinhar a quantidade que você quer... =)

 

Acho que neste caso, como não tem como saber o tamanho das strings e portanto o espaço a ser alocado não pode ser definido. O melhor é utilizar a string.h e os métodos dela para recuperar o tamanho, por exemplo.

 

Espero ter ajudado, FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker, eu entendi o que você quis dizer, porém perguntei ao meu professor da faculdade, ele disse que não quer que use a biblioteca <string.h>, você sabe alguma forma que eu poderia fazer sem usá-la! Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Obs.1: Estou apanhando da forma do qual o scanf lê strings de tamanho indefinido, não pretendo usar gets(), li que esta função pode trazer problemas na alocação de memória.

 

O problema do gets() é justamente que ele lê strings de tamanho indefinido. Você deve estabelecer um tamanho para a string e usar fgets() para pegar até um limite.

 

Para fazer a concatenação de 2 strings, você deve fazer um loop para pegar o tamanho de cada uma das 2 strings (esse tamanho no caso excluiria o último caractere, o '\0') e somar eles.

 

Um exemplo:

 

#include <stdio.h>

int main(void) {
char string1[] = "Matar é feio.";
char string2[] = "Mas é uma realidade.";
char *p;
int tamanho_string, tamanho_final;

for(p = string1, tamanho_string = 0; *p; ++p, ++tamanho_string);
tamanho_final = tamanho_string;

for(p = string2, tamanho_string = 0; *p; ++p, ++tamanho_string);
tamanho_final += tamanho_string;

printf("O tamanho das 2 strings somadas é: %d\n", tamanho_final);

return 0;
}

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.