Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fo_11

Duvida strings

Mensagens Recomendadas

fo_11

O objectivo do programa é escrever numa string numeros inteiros e só numeros, e não não pode ser de outra forma a introdução dos numeros.

O problema está em apagar o conteudo da string aux. que faz aparecer nessa mesma string numeros estranho.

Dúvidas

1-Como apagar conteudo de uma string já experimentei aux[0]='\0' visto que supostamente o programa ignora todo o que estiver para lá do terminador. OBS:(NÃO FUNCIONOU  :eek:)

Programa para quem quisere dar uma vista de olhos por alto caso o erro esteja mesmo à vista e não tenha dado conta:

#include<stdlib.h>
#include<stdio.h>
#define MAX 100
#define MAIOR(x,y) (((x)>(y))? (x):(y))

int main()
{
    char v[MAX],auxv[MAX];
    int i,maior=0,num,j,contador=0;
    
    printf("Inserir 6 numeros:");
    gets(v);
    
    for(i=0,j=0;v[i]!='\0';i++,j++)
     {if(v[i]!=' ')
       {auxv[j]=v[i];//o problema está aqui auxv não recebe todos os caracteres que devia receber e fica com numeros estranhos
       }
        
      else
       {auxv[j]='\0';
        num=atoi(auxv);
        maior=MAIOR(maior,num); //verifica qual é o maior numero
        j=0;    
       }
     }
    
    printf("Maior numero:%d\n",maior);
    system("pause");
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Peterv5

Não percebi bem se era isto que era pretendido, mas cá vai:

#include <stdio.h>
#define MAIOR(x,y) (((x)>(y))? (x):(y))
#define MAX 100

main()
{
      char v[MAX], aux[MAX];
      int i, j, num, maior = 0;
      
      gets(aux);
      
      for(i=0,j=0; aux[i]!='\0'; i++)
      {
                                     if(aux[i] != ' ')
                                     {
                                                v[j] = aux[i];//o problema está aqui auxv não recebe todos os caracteres que devia receber e fica com numeros estranhos
                                                j++;
                                     }
      }
      v[j] = '\0';
      
      for(i=0; v[i] != '\0'; i++)
      {
               num = (v[i] - 48);
               maior=MAIOR(maior,num); //verifica qual é o maior numero
      }
      
      printf("Maior numero:%d\n",maior);
      system("pause");
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Não, não era isto mas obrigado na mesma.

Vou explicar melhor o problema:

Exemplo: Tenh esta string, e sim é uma string e não é e não pode ser um array (imposto pelo professor), {'1', '23', '1515', '1222', '333', '1', '22', '22'}.

Nesta string qual é o maior numero?

Resposta:1515

Problema não consigo obter ess numero  :dontgetit:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Os "números estranhos" que obténs, segundo percebi, são compostos pelo 1º algarismo do 1º número introduzido, seguido dos algarismos do número "actual". Isso acontece porque, depois de afectares j com 0, ao começar a iteração seguinte, j será incrementado, e o número é escrito a partir do índice 1 em vez de 0.

Solução rápida? Afecta j com -1 em vez de 0.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Não, não era isto mas obrigado na mesma.

Vou explicar melhor o problema:

Exemplo: Tenh esta string, e sim é uma string e não é e não pode ser um array (imposto pelo professor), {'1', '23', '1515', '1222', '333', '1', '22', '22'}.

Nesta string qual é o maior numero?

Resposta:1515

Problema não consigo obter ess numero  :dontgetit:

Atenção que isso não é uma string, mas um array de caracteres (que, apesar de não dar erros de compilação, dá warnings porque estás a incializar com caracteres multi-caracter), a menos que declares que o array tem tamanho suficiente para suportar os valores de inicialização, mais, no mínimo, um espaço extra para acomodar o '\0'.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Pelo o que sei (e não quero estar afirmar nada pois sou novato nesta área) se usar o gets (get string em extensão) a função coloca automáticamente  o terminador de string no array de caracteres passando assim a ser considerada uma string.

O tamanho não se coloca em causa neste caso para a função que destina os 100 caracteres são mais que suficientes...

Agradeço se estiver a dizer alguma barbaridade que me chamem à atenção, o meu objectivo é apreender mais informações possiveis sobre esta linguagem e quanto mais cedo melhor pois tenho um projecto para elaborar este semestre  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Baderous: ou percebi mal, ou aquilo foi só uma forma de ele representar os números que está a ler com o gets. Pelo código, faz sentido que sejam inseridos todos seguidos, separados apenas por um espaço.

Pelo o que sei (e não quero estar afirmar nada pois sou novato nesta área) se usar o gets (get string em extensão) a função coloca automáticamente  o terminador de string no array de caracteres passando assim a ser considerada uma string.

Uma "string", em C, não passa vulgarmente de um array de caracteres, sejam eles lidos com gets, fgets, scanf, ou o que for.

Respondendo ao TheDark já experimentei adoptar -1 ao j mas sem resultado :down:

Qual é a string que estás a dar ao programa? Experimentei, por exemplo com

100 300 500 400 150 151

e correu bem. Mudaste a afectação dentro do else, certo?


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fo_11

Experimenta a colocar o maior valor de todos no fim. Não funcionará 

EDIT:Problema resolvido temos de colocar um espaço no final antes de carregarmos enter se não não compara o ultimo elemento. FINALLY!!!!!!! :cheesygrin:

PS:já agora para não colocar -1 no j o que me recomendas fazer?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Em vez de incrementares no for, incrementa no if.

Já agora, não podes utilizar a função strtok para dividir a string?


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.