Ir ao conteúdo
  • Cadastre-se
Guilherme Sixe

Remover espaços do começo e final de um string.

Recommended Posts

Boa noite, pessoal.

 

Bom, eu sei que existe uma função que remove espaços do começo e fim de uma string, mas estou fazendo um trabalho que é preciso fazer isso sem usar essa tal função. Pesquisei um pouco e quebrei a cabeça ate chegar nesse codigo. Enfim, nao consigo mais progredir. Na minha mente, ela deveria estar funcinando. Se alguem souber o motivo de nao estar funcionando, ficaria grato.

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

void TirarVacuo(char *s);
int main(){
    char texto[] = "   testando remocao de espacos de texto arbitrario       ";
    TirarVacuo(texto);
    printf("\n\n\%s", texto);
   
    return 0;
}

void TirarVacuo(char *s){
    
    int i;
    char temp[strlen(s)];
    
    // lado esquerdo
    for(i=0;i<strlen(s) && s[i]==' ';i++);
    
    temp[strlen(s)-i] = '\0';
 
    // lado direito
    for(i=strlen(s);s[i]==' ' || s[i]=='\0';i--);
    temp[strlen(temp)-(strlen(s)-i)+1] = '\0';
    
    strcpy(s,temp);
}

to.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem de contabilizar os espaços iniciais e mover o char inicial, array de char completo, para a esquerda, até [0], e os espaços que restarem, à direita é que coloca o '\0'; eu não tenho tempo para criar esse código, até porque eu ainda não fiz o código de mover chars e manter a originalidade sem os espaços, como você quer; no caso teria de usar 2 arrays, um para manter o original e o segundo para modificar, ou um buffer.

 

Edit-

Razão do erro: o array de char, e também o string em C++, possuem caracteres que já estavam na memória, que normalmente não eram '\0', no endereço virtual; portanto por isso que preenchemos o array de char com '\0' antes de modificar, e tem o detalhe que printf, puts, cout, fazem-no até encontrar o primeiro '\0', ignorando qualquer caractere após o '\0'.

String em C++, usando o CIN, já define onde ficará o '\0'

Editado por Mateus2
Acrescentar razão do erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece no seu código não é o que você pensa:

Exemplo: _ é mesmo que espaço;

 

Etapas do Código...

Step#1: Função TiraVacuo recebe _OI_MUNDO__

Step#2: vetor tmp[ 11  ] é criado

Step#3: Com for loop pela regra i := 1

Step#4: tmp[ 11 - 1 ] := 0 é mesmo que tmp[ 10 ] = 0

"Neste ponto já observamos um erro de lógica"

"Não faz sentido atribuir 0 no extremo oposto "

"em razão do número de espaços que existem "

"no início do vetor."

...

Código Corrigido

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

void TirarVacuo(char *s);
int main()
{
    char texto[] = "   testando remocao de espacos de texto arbitrario       ";
    TirarVacuo(texto);
    printf("\n\n\%s", texto);

    return 0;
}

void TirarVacuo( char *s )
{

    int i;
    // lado esquerdo
    for( i = 0; i < strlen( s ) && *( s + i ) ==' '; i++ );

    strcpy( s, s + i );

    // lado direito
    for( i = strlen( s ); *( s + i ) == ' '; i-- );

    *(s + i)  = '\0';
  
    return;
}

 

Editado por Mauro Britivaldo
Sintaxe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×