• 0
Sign in to follow this  
Scarlaty Costa

Dúvida String

Question

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á!

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this