Jump to content
Sign in to follow this  
Yuri Rodrigues Braz

Função trim

Recommended Posts

Pessoal, escrevi esse programinha para retirar os espaços em branco de um texto digitado pelo usuário.

Até consegui fazer ele funcionar, mas o problema é que eu substitui os espaços em branco remanescentes por '\a' que produz um beep no computador.

Como eu faço para simplesmente sumir com um caractere sem ter que transformar ele em beep?

 

Grato.

 

#include <stdio.h>

main()
{
      char frase[100];
      
      /* Obtendo a frase */
      printf("Digite uma frase: ");
      gets(frase);
      
      /* Chamando a funcao */
      trim(frase);
      
      getch();
      return 0;
}

/* trim: remove espacos em branco */
trim(char s[])
{
    int n = 0;
    
    while (n < strlen(s)) {
        if ((s[n] == ' ') && (s[n-1] == ' ')) {
                  while (s[n] == ' ') {
                        s[n] = '\a';
                        n++;
                  }
        }
        n++;
    }
    
    printf("Frase formatada : %s",s);
}

Outra coisa, eu fiz ela assim, escrevendo o resultado na função trim, porque eu não consigo utilizar o return com strings.

O ideal seria, na função trim, usar um returnfraseInversa, mas eu não consigo.

Se alguém souber, a ajuda é bem vinda.

Share this post


Link to post
Share on other sites

se achar um espaço em branco desloca as letras da direita para a esquerda, deixando '\0' na ultima posição da string.

 

[]s

Share this post


Link to post
Share on other sites

O programa que você postou não faz o que você quer. Ele substitui os espaços por beeps quando há dois ou mais espaços consecutivos na string.

 

A solução pra fazer isso proposta acima é cara em questão de tempo. A solução que eu apresentei necessita menos processamento, mas mais memória. Como dificilmente você terá textos da ordem de milhões de caracteres (megabytes), acho que não tem problema. Assim fica mais rápido. Então fica ssim:

 

 

 

#include <stdio.h>
#include <stdlib.h>

char *remover_espacos(char *texto)
{

	int i, j;
	char *saida;

	j = 0;
	saida = malloc(strlen(texto)+1);
	
	for (i = 0; texto[i]; i++)
		if (texto[i] != ' ')
		     saida[j++] = texto[i];
	
	saida[j] = 0;

	return saida;	
}


int main()
{

	char *texto = "testando remocao de espacos de texto arbitrario";
	char *sem_espacos = 0;

	printf("\n\n\t Texto com espacos:\n\t %s", texto);
	sem_espacos = remover_espacos(texto);
	printf("\n\n\t Texto sem espacos:\n\t %s", sem_espacos);
	printf("\n\n");
	return 0;
}

 

Qualquer dúvida sobre o código poste aí.

Share this post


Link to post
Share on other sites

Criando aqui uma função TRIM
Testada no Linux Ubuntu 14.04 com o GCC

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

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

int main(){
    char *texto = "      testando remocao de espacos de texto arbitrario       ";
    printf("\n\n\t Texto com espacos:\n\t [%s]", texto);
    texto = jGuther_trim(texto);
    printf("\n\n\t Texto sem espacos:\n\t [%s]", texto);
    printf("\n\n");
    return 0;
}

Share this post


Link to post
Share on other sites

Fiz mais um Trim, agora usando função void. Tbm testado no GCC

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

void jGuther_trim(char *s){
    
    int i;
    char temp[strlen(s)];
    
    // lado esquerdo
    for(i=0;i<strlen(s) && s[i]==' ';i++);
    strncpy(temp, s+i, strlen(s)-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);
}

int main(){
    char texto[] = "   testando remocao de espacos de texto arbitrario       ";
    printf("\n\n\t Texto com espacos:\n\t [%s]", texto);
    jGuther_trim(texto);
    printf("\n\n\t Texto sem espacos:\n\t [%s]", texto);
    printf("\n\n");
    return 0;
}


Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.