Pulse 0 Denunciar post Postado Maio 22, 2015 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
_Isis_ 202 Denunciar post Postado Maio 22, 2015 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