Bom dia a todos !!
Estou com uma dúvida e não estou conseguindo chegar no resultado.
Preciso Implementar uma função crop, para a TAD String.
Essa função deve ter a seguinte assinatura:
String *crop(String s1, int ini, int fim)
Ela deve receber uma String existente (testar se existe), e dois índices que demarcarão um trecho a ser 'cortado'. A função deve retornar uma nova String com o conteúdo da string s1 (parâmetro), mas sem o trecho cortado.
Exemplo: se o conteúdo de s1 for: "String apenas de teste", e chamarmos a função crop como indicado abaixo
String *s2 = crop(s1, 6, 12)
Como resultado, uma nova string deve ser criada e retornada, e nesse caso, s2 deveria ter o conteúdo:
"String de teste"
A parte " apenas" (demarcada pelos índices 6 e 12, inclusive) deve ser removida da string resultante.
Eu fiz esse código, mas ele apenas pega o indice inicial que eu escolhi e o final e mantem entre eles, exemplo: palavra "SAPO" eu escolho o indice 2 e o 4 ele retorna "APO"
// Substring INI e FIM
String *substring(String *s1, int ini, int fim)
{
String *s3 =(String *)malloc(sizeof(String));
int total_blocos = ((fim - ini)/TAM_BLOCO) + 1;
s3->str = (char *)malloc(total_blocos*TAM_BLOCO*sizeof(char));
int i;
for (i=0; i<fim-ini; i++)
{
s3->str[i] = s1->str[ini+i];
}
s3->str[i] = '\0';
s3->tam = fim - ini;
s3->num_blocos = total_blocos;
return s3;
}
int ini=0;
int fim=0;
int num=0;
puts("\t\nREALIZANDO A SUBSTRING ->");
while (num==0)
{
printf("\nQual caracter você deseja escolher para ser o inicial? ");
scanf("%i", &ini);
if (ini == 0) ini = 1;
printf("\nQual caracter você deseja escolher para ser o final? ");
scanf("%i", &fim);
if (fim>ini && ini<str1->tam && fim<str1->tam+1) num=1;
}
String *s3= substring(str1, ini-1, fim-1);
printf("\n");
printf("String: [%s] em s3\n", s3->str);
printf("String tamanho: [%i] Caracteres no s3\n", s3->tam);
printf("String numero de blocos: [%i] Blocos de %i espacos usados no s3\n\n", s3->num_blocos, TAM_BLOCO);
Obrigada desde já!