Ir ao conteúdo

Posts recomendados

Postado

 Esse código tira todos os espaços mais eu queria que tirasse só quando tivesse 2 espaços ou mais que 2...Help :confused:
Exemplo: No arquivo txt está escrito
LINHA 1
LINHA 2
LINHA   3

-----------------------------
Depois ficasse
LINHA 1
LINHA 2
LINHA 3

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
	int i,tam,j=0;
	char frase[900],novo[900],le[900];
	FILE *file;
	file = fopen ("teste.txt","r+");
	fscanf(file,"%900[^\0]",frase);
	//while(fscanf(file,"%900[^\0]",frase))
	//while(fgets(frase,900,file))
	{
	tam = strlen(frase);
	for(i = 0;i < tam;i++)
	{
		 if(frase[i] != ' ')
		 {
			  novo[j] = frase[i];
			  j++;
			  novo[j] = '\0';
			  }
			  }	  
		  fprintf(file,novo);
		  printf("%s",novo);
		  fclose(file);
		  system("start teste.txt");
		  return 0;
    }
	}

 

  • Curtir 1
Postado

Dentro do loop você pode verificar se o atual char é espaço, verifique o atual e o próximo, assim:

//atual é espaço
//próximo é espaço
//continuar loop
if( frase[i] == ' ' && frase[i+1] == ' '){
 i+=2;
 continue;
} 
//atual é espaço
//próximo não é espaço
//adicionar espaço
else if( frase[i] == ' ' && frase[i+1] != ' '){
 novo[j]=frase[i]; 
 i+=2;
 j++;
} 

Na lógica se temos dois espaços, ele só será adicionado se o próximo char não for.

  • Curtir 1
  • Obrigado 1
Postado

Ele apaga algumas letras pois nesse segmento, ele está pulando se a próxima for igual a espaço:

else if(frase[i+1] != ' '){
	novo[j] = frase[i];
	j++;
	novo[j] = '\0';
}

 

Então coloque assim:

//se atual for <espaço> e o próximo não for -> adicionar
//se o atual for diferente de espaço -> adicionar
else if(frase[i+1] != ' ' && frase[i] == ' ' || frase[i] != ' ') {
		novo[j] = frase[i];
		j++;
		novo[j] = '\0';
}

 

 

  • Curtir 1
  • Amei 1
Postado

@Xaws     o arquivo txt está sendo duplicado ,  creio que precisaria uma pequena modificação.   veja esse código aqui :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    int i,tam,j=0;
    char frase[900],novo[900],le[900];
    FILE *file;
    file = fopen ("teste.txt","r+");
    fscanf(file,"%900[^\0]",frase);
    tam = strlen(frase);
    printf("val de tam %d\n\n",tam);getch();
    for(i=0;i<tam;i++){
        if(frase[i] != ' '){
            novo[j] = frase[i];
            if(frase[i+1]==' '){
                j++;
                novo[j]=' ';
            }
            j++;
            novo[j] = '\0';
        }
    }
    fclose(file);
    remove("teste.txt");
    file=fopen("teste.txt","w");
    fprintf(file,novo);
    printf("%s\n\n",novo);
    fclose(file);
    //system("start teste.txt");
    return 0;
}

 

  • Obrigado 1
Postado

@devair1010  Não man, isso é apenas uma parte do código... Eu fiz pra ele salvar as informações em um arquivo novo de texto, depois apagar o antigo e renomear o novo assim não fica duplicado...Mais valeu mesmo assim

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...