Ir ao conteúdo
  • Cadastre-se

C Como preencher espaços vazios de um Vetor C


Posts recomendados

Bom dia, queria saber como faço para preencher o espaço restante de um vetor com " - ", estou tentando assim:

Edit: Ja tentei com if(nome == NULL)...

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

int main()
{
    char nome[31] = "", sabor[21] = "", data[11] = "";
    int i;
    scanf("%s",&nome);
    for(i = 0; 1<31; i++)
    {
        if(nome[i] == "")
        {
            nome[i] = "-";
        }
    }
    scanf("%s",&sabor);

    i = 0;
    for( i = 0; i<21; i++)
    {
        if(sabor[i] == "")
        {
            sabor[i] == "-";
        }
    }
    scanf("%s",&data);

    i = 0;
    for(i=0;i<11;i++)
    {
        if(data[i] == "")
        {
            data[i] = "-";
        }
    }
    printf("%s%s%s", nome, sabor, data);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Não entendi muito bem o seu código, mas eu acho que você quer fazer algo assim

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

/* Constantes */
#define TAMANHO_NOME 40

int main()
{
  char nome[TAMANHO_NOME],contador;
  printf("\nDigite o seu nome conmpleto\n\t:");
  fgets(nome,TAMANHO_NOME,stdin);
  for(contador=0; nome[contador]; contador++)
    if(nome[contador]==' ')
      nome[contador]='-';
  printf("\nSeu nome sem espacos:\t%s",nome);
  getchar();
  return(0);
}

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Bruno César Oliveira Dias     esse vetor de char , nome , é uma string ,e   nesses casos o scanf para pegar string não precisa usar o simbolo & , e as strings ali não precisam ser inicializadas pois em seguida você preencherá elas com o scanf ,  e para comparar os caracteres use aspas simples e também na string não haverá espaços vazios , o que pode ter são caracteres espaços mesmo digitado no teclado e cujo código ASCII  eh 32 ,   mas se você usar esse scanf você nunca terá uma string com espaço nela , pois o comando scanf não pega o espaço ele pega os caracteres digitados ate antes do espaço , então se você quer pegar o mome e sobrenomes  incluindo todos os espaços digitados use o comando gets ou fgets ,  mas esse ultimo não eh muito bom pois ele pega também o newline , e na hora que vai imprimir ele pula uma linha automaticamente .

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Olá!

 

Em C vetores --- strings --- são declaradas como char* ou char[] e são apenas uma sequência de bytes terminadas por um byte com valor 0, que você pode escreer 0, \0, NULL, mas é só isso: um byte com valor zero.

 

Quando você usa scanf() no seu programa a rotina lê uma sequência de caracteres da entrada e coloca a partir do endereço apontado pela variável, como char nome[31] no seu caso. E acrescenta o terminador 0 no final. Então o seu vetor nome pode ter até 30 caracteres.

 

Pra você "completar" com '- ' precisa saber quanto já foi usado da área que declarou, e o tamanho da área que declarou --- 31 bytes --- e "completar" colocando os '-' e depois o 0 no final

 

Eis a saída de um programa de exemplo


Conteudo original do vetor no formato int

  0   1   2   3   4   5   6   7   8   9 Posicao
-52 -52 -52 -52 -52 -52 -52 -52 -52 -52

Depois de ler [abcde]

  0   1   2   3   4   5   6   7   8   9 Posicao
097 098 099 100 101 000 -52 -52 -52 -52

vetor em formato string:[abcde] com 5 bytes

Preenchendo com '-' ate o final...

vetor em formato string:[abcde-----------------------------------] com 40 bytes

E o programa

int    main(int argc, char** argv)
{
    //int v;
    char    vetor[41];
    char* pVetor = vetor;
    char* nome = "abcde";

    printf("\nConteudo original do vetor no formato int\n");
    printf("\n  0   1   2   3   4   5   6   7   8   9 Posicao\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%03d ", (int)(vetor[i]));
    }    // end for
    printf("\n");

    printf("\nDepois de ler [%s]\n", nome);
    strcpy(vetor, nome);
    printf("\n  0   1   2   3   4   5   6   7   8   9 Posicao\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%03d ", (int)(vetor[i]));
    }    // end for
    printf("\n");

    printf("\nvetor em formato string:[%s] com %d bytes\n", vetor, strlen(vetor));
    printf("\nPreenchendo com '-' ate o final...\n");
    for (int i = strlen(vetor); i < 41; i++)
    {
        vetor[i] = '-';
    }    // end for
    vetor[40] = 0;

    printf("\nvetor em formato string:[%s] com %d bytes\n", vetor, strlen(vetor));
    return 0;
}

Deve ajudar a entender. Veja lá a posição do 0 depois de ler "abcde"

 

Sobre os códigos veja a tabela ASCII em http://www.asciitable.com por exemplo. 'a' = 97 por exemplo

 

  • Curtir 4
Link para o comentário
Compartilhar em outros sites

Olá!

 

Vou postar uma maneira mais formal de preencher um vetor com uma letra até o tamanho total declarado porque muitas vezes gera dúvida e então pode ser útil...

 

imagine que você tenha uma função declarada assim

int    completar_com(char c, char* v, int t);

E os vetores de teste 

    char    vetor[10];
    char*   nome = "abcde";

Um retorno útil dessa função seria o número de caracteres inseridos, ou (-1) em caso de erro

Então se rodar

strcpy(vetor,nome);
completar_com('-', vetor, 10); 

Ela deve retornar 4 e o vetor ficar com "abcde----"

E aí se chamar de novo com a string completa deve retornar 0, já que não cabe mais nenhum.

E se rodar

vetor[0]=0;
completar_com('*', vetor, 10); 

deve retornar 9 e o vetor ficar com "*********" nove asteriscos, claro.

 

Uma possível função dessas:

int    completar_com(char c, char* v, int t)
{
    // completa o vetor v de tamanho t com o caracter c
    // retorna -1 se deu erro
    // retorna o numero de caracteres inseridos
    int i;
    if (t < 1) return -1;    // parametro errado
    if (v == NULL) return -1;
    for (i = 0; i < t; i++)
    {
        if (v[i] == 0) break;
    }    // end for
    // aqui ou i aponta para o zero ou chegou ao fim e nao achou
    if (i ==(t-1)) return 0;    // ou nao achou nenhum ou estava cheio
    for (int j = i; j < t - 1; j++) v[j] = c;    // completa
    v[t-1] = 0; // claro, tem que ter um zero no final
    return (t-i-1);    // desconta o zero no final
}    // end completar_com()

Um teste com legenda :D mostrando o que acontece no vetor:

(1) vetor com "abcde"
  0   1   2   3   4   5   6   7   8   9 Posicao
097 098 099 100 101 000 -52 -52 -52 -52
  a   b   c   d   e NUL ??? ??? ??? ???

"completar_com('-', vetor, 10)" retornou 4

no retorno da rotina
  0   1   2   3   4   5   6   7   8   9 Posicao
097 098 099 100 101 045 045 045 045 000
  a   b   c   d   e   -   -   -   - NUL

(2) depois de colocar um '0' no inicio, vetor vazio
  0   1   2   3   4   5   6   7   8   9 Posicao
000 098 099 100 101 045 045 045 045 000
NUL   b   c   d   e   -   -   -   - NUL

"completar_com('*', vetor, 10)" retornou 9

no retorno da rotina
  0   1   2   3   4   5   6   7   8   9 Posicao
042 042 042 042 042 042 042 042 042 000
  *   *   *   *   *   *   *   *   * NUL

(3) ja com o vetor preenchido com asteriscos ate o fim
  0   1   2   3   4   5   6   7   8   9 Posicao
042 042 042 042 042 042 042 042 042 000
  *   *   *   *   *   *   *   *   * NUL

"completar_com('+', vetor, 10)" retornou 0

no retorno da rotina
  0   1   2   3   4   5   6   7   8   9 Posicao
042 042 042 042 042 042 042 042 042 000
  *   *   *   *   *   *   *   *   * NUL

Eis o programa de teste --- a função bem besta 

void        mostra_vetor(char* vetor, int t, char * msg);

imprime o grid e os valores em decimal e caracter e a mensagem 

#define _CRT_SECURE_NO_WARNINGS
#include "ctype.h"
#include <stdio.h>
#include <stdlib.h>
#include "string.h"


void        mostra_vetor(char* vetor, int t, char * msg)
{
    int i;
    printf("\n%s\n", msg);
    printf("  0   1   2   3   4   5   6   7   8   9 Posicao\n");

    for (i = 0; i < t; i++)
    {
        printf("%03d ", (int)(vetor[i]));
    }    // end for
    printf("\n");

    for (i = 0; i < t; i++)
    {
        if (((int)(vetor[i])>0) && ((int)(vetor[i]) < 255))
        {
            printf("%3c ", (int)(vetor[i]));
        }
        else
        {
            if (vetor[i] == 0)
            {
                printf("NUL ");
            }
            else
            {
                printf("??? ");
            }    // endif
        }    // end if
    }    // end for
        printf("\n");

        return;
}    // end mostra_vetor()


int    completar_com(char c, char* v, int t)
{
    // completa o vetor v de tamanho t com o caracter c
    // retorna -1 se deu erro
    // retorna o numero de caracteres inseridos
    int i;
    if (t < 1) return -1;    // parametro errado
    if (v == NULL) return -1;
    for (i = 0; i < t; i++)
    {
        if (v[i] == 0) break;
    }    // end for
    // aqui ou i aponta para o zero ou chegou ao fim e nao achou
    if (i ==(t-1)) return 0;    // ou nao achou nenhum ou estava cheio
    for (int j = i; j < t - 1; j++) v[j] = c;    // completa
    v[t-1] = 0; // claro, tem que ter um zero no final
    return (t-i-1);    // desconta o zero no final
}    // end completar_com()


int    main(int argc, char** argv)
{
    char    vetor[10];
    char* nome = "abcde";
     int i;

    strcpy(vetor, nome);    // completa a partir de "abcde"

    mostra_vetor(vetor, 10, "(1) vetor com \"abcde\"");
    i = completar_com('-', vetor, 10);
    printf("\n\"completar_com('-', vetor, 10)\" retornou %d\n", i);
    mostra_vetor(vetor, 10, "no retorno da rotina");

    vetor[0] = 0;            // completa a partir do vetor vazio

    mostra_vetor(vetor, 10, "(2) depois de colocar um '0' no inicio, vetor vazio");
    i = completar_com('*', vetor, 10);
    printf("\n\"completar_com('*', vetor, 10)\" retornou %d\n", i);
    mostra_vetor(vetor, 10, "no retorno da rotina");

    // agora testa com a string completa
    mostra_vetor(vetor, 10, "(3) ja com o vetor preenchido com asteriscos ate o fim");
    i = completar_com('+', vetor, 10);
    printf("\n\"completar_com('+', vetor, 10)\" retornou %d\n", i);
    mostra_vetor(vetor, 10, "no retorno da rotina");

    return 0;
}

 

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