Jump to content

Juntar duas strings


Go to solution Solved by brink@ero,

Recommended Posts

Posted

Ppl, alguem me ajuda a resolver este problema?

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 difícil, pois quase que aposto que existe uma maneira menos complicada de fazer isto.  Alguém sabe?

Posted

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 :\  ?

Posted

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

Posted
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

Posted

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

  • Solution
Posted

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");
}
Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.