Ir para conteúdo

Arquivado

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

Pulse

String

Recommended Posts

Faça um programa que receba do usuário duas strings A e B e uma posição (um número inteiro).
Em seguida, faça que ele insira a string A dentro da string B na posição indicada. Se a posição for
menor ou igual a zero, B deve ser inserida no início da frase. Se a posição for maior que o tamanho
de A, B deve ser inserida no final de A, após o último caractere.
#include <stdio.h>
#include <string.h>

int main ()
{
    char a[100], b[100];
    int n, i, k=0;

    puts("Digite uma frase");
    gets(a);

    puts("Digite outra frase");
    gets(b);

    puts("Digite uma posicao");
    scanf("%d", &n);

    if(n>strlen(a))
    {
        strcat(a, b);
    }
    else if(n>0)
    {
        for(i=0; i<strlen(a) - n; i++)
        {
            b[strlen(a) + i + 1] = b[n+i];
        }
        for(i=n; i<=strlen(a); i++)
        {
            b[n+i] = a[k];
            k++;
        }
    }

    puts(b);

}

Consegui fazer isso, por enquanto, ainda assim a segunda condição está com erros, não sei como fazer isso. Há alguma forma de concatenar strings no "meio" de outras? Se não houver, como devo proceder pra resolver o exercício?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Novamente: não use gets.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100

int main(void) {
  char str_a[MAX], str_b[MAX];

  fgets(str_a, MAX-1, stdin);
  fgets(str_b, MAX-1, stdin);

  str_a[strlen(str_a)-1] = '\0';
  str_b[strlen(str_b)-1] = '\0';

  unsigned int pos;
  char * nova_string = malloc((strlen(str_a)+strlen(str_b)) * sizeof(char));
  if (!nova_string) {
    puts("Erro ao alocar memória");
    return -1;
  }

  scanf("%d", &pos);
  if (pos <= 0) {
    nova_string = strcat(str_b, str_a);

  } else if (pos > strlen(str_a)) {
    nova_string = strcat(str_a,str_b);

  } else {
    nova_string = strncat(nova_string, str_a, pos * sizeof(char));
    nova_string = strcat(nova_string, str_b);
    nova_string = strncat(nova_string, &str_a[pos], (strlen(str_a)-pos) * sizeof(char));
  }
  printf("%s\n", nova_string);
  free(nova_string);
  return 0;
}

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.