Ir ao conteúdo
  • Cadastre-se

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

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

 

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

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!