Ir ao conteúdo
  • Cadastre-se

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


Guilherme Sixe

Posts recomendados

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.

Link para o comentário
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'

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...