• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Red_Beret

[Resolvido] Juntar duas strings?

12 mensagens neste tópico

Ppl, alguem me ajuda a resolver este problema?

O enunciado é o seguinte

capturaecra1ed.png

Eu fiz assim:

#include  <stdio.h>

char adic (char *string1, char *string2, int num){
int ct,ct2,ct3,ct4,ct5,ct6,ct7,tamanho=0;
char aux[100];
for (ct=0; string1[ct]!='/0';ct++){
	tamanho++;
}
if (tamanho < num)
	return -1;
else{
	for (ct2=0; ct2<num; ct2++){
		aux[ct2]=string1[ct2];
	}
	for(ct3=ct2+1, ct4=0; string2[ct4]!='/0'; ct3++, ct4++){
		aux[ct3]=string2[ct4];
	}
	for(ct5=ct3+1, ct6=ct2; string1[ct6]!='/0';ct5++, ct6++){
		aux[ct5]=string1[ct6];
	}
	for(ct7=0; aux[ct7]!='/0'; ct++){
		string1[ct]=aux[ct];
	}
	return *string1;
}
}

void main(){
char string1[100], string2[50];
int num;
printf("Introduza a primeira frase (maximo 50 caracteres)\n");
gets(string1);
printf("Introduza a segunda frase (maximo 50 caracteres)\n");
gets(string2);
printf("Introduza a posição\n");
scanf("%d", &num);
printf("%c", adic(string1,string2, num));
}

Claro, que está completamente mal. PAra além disso, fui pelo lado mais dificil, pois quase que aposto que existe uma meneira menois complicada de fazer isto.  Alguem sabe?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim por alto penso que vais ter de concatenar as duas string's, agora o codigo para isso, nao fasso ideia, mas os masters do C já ai aparecem! :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem primeiro que tudo o enunciado ali manda uma gafe, se é para juntar a partir da posição 'n' á string1 pk é que ele diz que "Caso a posicao seja inválida(se a dimensão da string 1 for inferior à posição).

Acho que é "Caso a dimensao da string2 for inferior à posicao, porque a string 1 fica intacta.

não entendo se é para juntar á string 1 certo conteudo da string 2 (definido pela posiçao) ou se é a partir de certa posiçao adicionar o conteudo da string2, pode ser entendido o enunciado de 2 maneiras diferentes :\  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que percebi do enunciado, é para fazer assim:

String1 - A Joana foi a fonte

String2 - O João tb

POS - 8

Return - A Joana O João tb foi a fonte.

Ou seja, por a string 2 dentro da 1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só vejo um problema.. A função devolve uma string ou devolve o numero? Porque ao declarar a função temos que indicar o que ela vai devolver..

A alternativa é ela ser um procedimento, e alterar a string 1 caso seja possivel, e caso nao seja imprimir -1..

Vou tentar resolver de qualquer forma

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

char str1[40];
char str2[40];


char *adic(char *x,char *y,int POS)
{

  j= strlen(y);
  
  if(POS > j)
  {  
    printf("POSICAO ERRADA");
    getchar();
    exit(0);
  }
else
  for (i=strlen(x)-1;y[POS] !='\0';POS++,i++)
    x[i] = y[POS]; 
return x;
}

main()
{

printf("Introduza a string1\n");
gets(str1);
printf("Introduza a string2\n");
gets(str2);
printf("Introduza a posicao \n");
scanf("%d",&pos);
adic(str1,str2,pos);
printf("string final : %s",adic(str1,str2,pos) );
}

tinha feito assim mas se fosse para juntar a partir da x posição da string 2 á string 1 que fica intacta,  não sei se  o code está certo, alguem que veja sff

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dá. 

Fica assim

Introduza a string1

O joao foi a fonte

Introduza a string2

a maria ira tambem

Introduza a posicao

8

string final : O joao foi a fontira tambeira tambem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hmm,, não testei mas já não começa mal.

Eu fiz a partir da posição 'n' da string 2 e ele começa ja em ira (POS 8) , agora aparece ira tambem 2 vezes, quando chegar a casa vejo isso,

abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta isto:

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


short adic(char *x,char *y,int pos)
{
int dim_x, dim_y, count;

count=-1;
dim_x=(int)strlen(x);
dim_y=(int)strlen(y);

if(dim_x<pos)
	return -1;
else
{
	while(count++<dim_y-1)
		x[pos+count-1]=y[count];
	if((pos+count)>dim_x)
		x[pos+count-1]='\0';
	return 0;
}
}

main()
{
char	str1[40],
	   str2[40];
int	  pos;

printf("Introduza a string1:\n");
gets(str1);
printf("Introduza a string2:\n");
gets(str2);
printf("Introduza a posicao:\n");
scanf("%d",&pos);
if(adic(str1,str2,pos)==-1)
	printf("*** Error: a posicao e' maior que a dimensao da string1! ***\n");
else
	printf("string1 final:\n%s\n",str1 );

system("pause");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tks. é isso mesmo.

Só uma pergunta, o system(pause) serve para que?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tks. é isso mesmo.

Só uma pergunta, o system(pause) serve para que?

Serve para fazer uma pausa no programa antes deste encerrar.

É o mesmo que:

printf("prima qualquer tecla para continuar...");

getchar();

getchar();

Penso eu de que...

Se quiseres podes apagar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah,ok.  é que como eu uso o VS, ele faz isso automaticamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora