Ir ao conteúdo
  • Cadastre-se
Gabriel Bombardelli

C Eliminação de espaços em branco (strings) - Em linguagem C

Posts recomendados

Boa noite, tenho um trabalho para fazer em linguagem em c, porém não tenho ideia de como começar meu algoritmo, alguém poderia ajudar? 

Exercício proposto: 

•Escreva uma rotina que receba uma string s e a altere por meio da eliminação dos espaços em branco em excesso.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Bombardelli kkkk, eu acabei de passa no C completo e total na pagina 41 tem o que você quer, procura o pdf ai na net.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@KXSY Opa, cara nao entendi o que quis dizer kkkkk.... consegue disponibilizar o link por favor??! kkkk

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Bombardelli tá na mão http://www.inf.ufpr.br/lesoliveira/download/c-completo-total.pdf

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não vai servir, o programa no livro apenas imprime outro caractere no lugar onde haveria um espaço, a string nem é alterada, apenas é impressa com caractere diferente na tela.

 

Mas pelo que entendi o seu programa deve receber uma string que pode conter espaços duplicados, como:

 

"minha   mae  mandou eu"

 

E eliminar os espaços repetidos deixando 1 espaço só em cada lugar:

"minha mae mandou eu"

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Bombardelli Sim, por isso mandei o livro, e uma simples questão de ir testando até achar um espaço, eu também não sabia pelo o que você queria trocar.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O enunciado como você postou implica que a string deve ser alterada de fato, na memória, ao invés de apenas imprimir na tela sem os espaços extras, mas se for apenas para imprimir na tela com apenas 1 espaço então pode seguir uma lógica parecida sim...

adicionado 10 minutos depois

Se puder criar outra string que copia a string original eliminando os espaços repetidos então também dá pra usar esse método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal, o que conseguir fazer foi o seguinte, porém remove todos os espaços, como faço para remover só os em excesso?

 

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

void RemoveOsEspacos(char s[]){
    int i = 1, j= 1;

    for(i = 1; i < strlen(s); i++){
        if(s[i] != ' '){
            s[j] = s[i];
            j++;
        }
    }
    s[j] = '\0';

}

int main()
{
    char frase[50];

    printf("Digite a frase:");
    fgets(frase, 50, stdin);

    RemoveOsEspacos(frase);

    printf("%s", frase);

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Índices das posições nos vetores na linguagem C começam com índice 0, logo i e j devem ser inicializados com valor 0 na função (e no for).

 

Uma maneira seria fazer algo assim:

 

Trocar:

if(s[i] != ' '){

 

Por:

if(s[i] != ' ' || s[i+1] != ' '){

 

adicionado 3 minutos depois

Assim ele só copia o último dos espaços repetidos.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, isrnick disse:

Índices das posições nos vetores na linguagem C começam com índice 0, logo i e j devem ser inicializados com valor 0 na função (e no for).

 

Uma maneira seria fazer algo assim:

 

Trocar:


if(s[i] != ' '){

 

Por:


if(s[i] != ' ' || s[i+1] != ' '){

 

 

Valeu rapazeada, vcs são fera!!

 

obs.: ... s[i+1] != ' '      ==     s[i-1] != ' ' 

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, Gabriel Bombardelli disse:

obs.: ... s[i+1] != ' '      ==     s[i-1] != ' ' 

Nesse caso ele copiaria apenas o primeiro dos espaços repetidos.

 

Mas não é a mesma coisa, pois i começa igual a 0, e nesse caso i-1 = 0-1 = -1 e não existe índice negativo. (Esse problema aconteceria na situação em que o primeiro caractere da string for um espaço ' ').

  • Curtir 1

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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!