Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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í.

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}

Compartilhar este post


Link para o post
Compartilhar em outros 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;
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.