Ir ao conteúdo

Posts recomendados

Postado

estou tentando concatenar 2 strings em C, deveria funcionar da seguinte maneira:

o usuário digita seu primeiro nome, depois o seu segundo nome e escolhe uma posição no vetor.

a saída deveria ser o primeiro nome do usuário ate a posição do vetor selecionada em seguida o seu segundo nome concatenado e depois o restante do seu primeiro nome.

 

EX:JOAO

guerber

POSIÇAO : 2

saida: JOguerberAO

 

porém meu código percorre o vetor mas não concatena o restante da string no caso o "AO" nao aparece.

alguém consegue identificar o erro?

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

int main(){
	
	char str1[100], str2[100], str3[100];
	int RU, i, x;
	
	printf("Digite seu primeiro nome: "); //salva o primeiro nome
	scanf("%s", &str1);
	printf("Digite seu segundo nome: "); // salva o segundo nome
	scanf("%s", &str2);
	printf("Digite uma posicao: ");//salva a posicao para concatenar
	scanf("%d", &RU);
	// salva a parte concatenada de str1 em str3
	x= 0;
	for(i= 0; i < RU ; i++){
		str3[i] = str1[i]; 
		x = i;
	}
	// concatena str2 com str3
	x += 1;
	i = 0;
	while (str2[i] != '\0' )  {
		str3[x] = str2[i];  
		x++;
		i++;
		
	}
	 // deveria concatenar o restante de str1 par str3
	x += 1;	
	for(i = RU+1; str1[i]!= '\0' ; i++){
		str3[x] = str1[i];                
		x++;
	}
	
	printf("%s\n", str3); // resultado 
	printf("%d\n", x); // mostra o indice x
	printf("%d\n", i);// mostra o indice i
	
	system ("pause");
	return 0;
	
}

 

  • Curtir 1
Postado
#include <stdio.h>
#include <assert.h>
#include<stdlib.h>
#include<string.h>

//
// Função  duas string
//

void contatenarStrings (char  string1[], char string2[], int pos);

int main(void){
 char lastName[20];
 char firstName[20];
 
 int pos;
 
 
 scanf("%s", firstName);
 scanf("%s", lastName);
 scanf("%d", &pos);
  contatenarStrings(firstName, lastName, pos);
 printf("%s\n", firstName);
 return 0;
}

void contatenarStrings (char  string1[], char string2[], int pos)
{    
    char tmp[20];
    strncpy(tmp, string1, pos);
    strcat(tmp, string2);
    strcat(tmp, &string1[pos]);
    strcpy(string1, tmp);
}

 

  • Curtir 1
Postado
#include <stdio.h>
#include <stdlib.h>

int main(){
	
	char str1[100], str2[100], str3[100];
	int RU, i, x;
	
	printf("Digite seu primeiro nome: "); //salva o primeiro nome
	scanf("%s", &str1);
	printf("Digite seu segundo nome: "); // salva o segundo nome
	scanf("%s", &str2);
	printf("Digite uma posicao: ");//salva a posicao para concatenar
	scanf("%d", &RU);
	// salva a parte concatenada de str1 em str3
	for(i= 0; i < RU ; i++){
		str3[i] = str1[i]; 
	}
    x = i;
	// concatena str2 com str3
	i = 0;
	while (str2[i] != '\0' )  {
		str3[x] = str2[i];  
		x++;
		i++;
	}
	 // deveria concatenar o restante de str1 par str3
	for(i = RU+1; str1[i]!= '\0' ; i++){
		str3[x] = str1[i];                
		x++;
	}
	str3[x] = '\0';
	printf("%s\n", str3); // resultado 
	printf("%d\n", x); // mostra o indice x
	printf("%d\n", i);// mostra o indice i
	
	system ("pause");
	return 0;
	
}

 

  • Curtir 1
Postado

Além do i = RU, o x += 1 entre o while e o segundo for também não deveria estar aí, pois ao contrário do primeiro for está usando x++ dentro do while ao invés de x = i, então já foi incrementado +1 e não precisa desse x += 1.

 

Fora isso também é preciso colocar o '\0' no fim da str3.

 

E também removendo os & dos 2 primeiros scanfs o código fica assim:

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

int main() {

    char str1[100], str2[100], str3[100];
    int RU, i, x;

    printf("Digite seu primeiro nome: "); //salva o primeiro nome
    scanf("%s", str1); //Não vai &
    printf("Digite seu segundo nome: "); // salva o segundo nome
    scanf("%s", str2); //Não vai &
    printf("Digite uma posicao: "); //salva a posicao para concatenar
    scanf("%d", &RU);
    // salva a parte concatenada de str1 em str3
    x = 0;
    for (i = 0; i < RU; i++) {
        str3[i] = str1[i];
        x = i;
    }
    // concatena str2 com str3
    x += 1;
    i = 0;
    while (str2[i] != '\0') {
        str3[x] = str2[i];
        x++;
        i++;

    }
    // deveria concatenar o restante de str1 par str3
    //x += 1;	
    for (i = RU; str1[i] != '\0'; i++) {  //i = RU
        str3[x] = str1[i];
        x++;
    }

    str3[x] = '\0'; //Coloca o caractere nulo no fim

    printf("%s\n", str3); // resultado 
    printf("%d\n", x); // mostra o indice x
    printf("%d\n", i); // mostra o indice i

    system("pause");
    return 0;

}

 

  • Curtir 2
Postado

@JVGS1111 Olá, tudo bem!

 

56 minutos atrás, JVGS1111 disse:

@Flávio Pedroza @isrnick MUITO obrigado aos 2, me ajudaram muito, principalmente na parte de adicionar \0 no final da string, eu pensava que era automático.

👌 Que bom que você alcançou a solução de seu problema, agora post no fórum para que futuramente outros (membros) vejam o resultado.

Postado

Uma outra opção, usando funções do C para copiar os caracteres:https://ideone.com/z8MioU
 

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

int main(void) {
 // se eu colocar que o vetor terá 20 caracteres, se eu digitar 21 dará um buffer overflow
 char *lastName = NULL;
 char *firstName = NULL;
 char *fullName = NULL;
 int pos;
 size_t tam1, tam2, tamanho;
 
 printf("Oi mundo!\n");
 
 // passando o scanf usando %ms, ele vai alocar na hora o tamanho necessário para guardar a string
 scanf("%ms", &firstName);
 scanf("%ms", &lastName);
 scanf("%d", &pos);
 
 printf("\nEntrada:\n%s - %lu chars\n%s - %lu chars\n%d\n", firstName, strlen(firstName), lastName, strlen(lastName), pos);
 
 // a função vai alocar o espaço para a nova string, sem mexer nas outras
 tam1 = strlen(firstName);
 tam2 = strlen(lastName);
 // +1 pro caractere \0 do final
 tamanho = tam1 + tam2 + 1;
 printf("Tamanho total fullName: %lu chars\n", tamanho);
 fullName = malloc(tamanho);
 // checa se pos é válido
 if (pos < 1 || pos > tam1) {
 	printf("Pos é inválido, não podemos continuar");
 } else {
  // copia o início da 1
  memcpy(fullName, firstName, pos);
  // copia os caracteres da 2 menos o 0
  memcpy(fullName + pos, lastName, tam2);
  // cpoia o resto da 1
  memcpy(fullName + pos + tam2, &firstName[pos], tam1 - pos);
  // será que precisa?
  fullName[tamanho - 1] = 0;
  printf("\nConcatenando:\n%s\n", fullName);
 }
 
 // depois de alocar dinamicamente, liberar a memória depois de usar
 free(firstName);
 free(lastName);
 free(fullName);
 
 return 0;
}

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!