Ir para o conteúdo
pedro_nuno

Dúvida_String

Mensagens Recomendadas

pedro_nuno

Bom dia!

Preciso de ajuda para implementar um código que me permita fazer o seguinte:

1) Introduzir uma string, por exemplo: PT50123443211234567890172

2) Se os 4 primeiros caracteres forem PT50, então a string deve ficar :

123443211234567890172PT50

3) Substituir o P por 25 e o T por 29, ficando:

123443211234567890172252950

4)por fim, dividir o numero por 97 e verificar se o resto da divisão é 1.

Neste momento o que eu tenho implementado é o seguinte:

int i;
char iban[25];
char iban2[27];


gets(iban);

if(iban[0] == 'P' && iban[1]== 'T' && iban[2]==5 && iban[3]==0)
{
for(i=0; i<25; i++)
{
iban2[i]=iban[i];
iban2[23]=29;
iban2[24]= 25;
iban2[25]=5;
iban2[26]=0;
}
}

for(i=0; i!='\0'; i++)
{
printf("%d", iban2[i]);
}

Mas não imprime a string que eu quero, ou seja, não imprime 123443211234567890172252950

Na verdade, apenas me deixa introduzir a string e depois não imprime nada.

Alguém tem ideia de como resolver?

Muito obrigado

Editado por thoga31
Tags code + GeSHi + Simplificação da formatação

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

antes de mais, coloca o código de forma a ser possível ler

isto é, remove todas essas cores e afins, depois coloca o código dentro das tags apropriadas como descrito na secção de ajuda do fórum (link na barra inferior da página)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

Peço desculpa mas não estou a perceber onde quer chegar.

Penso que fui bastante explícito a expor a minha dúvida. Se me puder ajudar, fico-lhe muito agradecido porque estou atrapalhado com este trabalho.

Um caracter é um tipo de dados.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Peço desculpa mas não estou a perceber onde quer chegar.

eu sei onde quero chegar, e se continuares a responder, ficarás a saber

Penso que fui bastante explícito a expor a minha dúvida. Se me puder ajudar, fico-lhe muito agradecido porque estou atrapalhado com este trabalho.

sim, foste explícito o suficiente para demonstrar que não sabes o que é uma string, e como tal, é isso que te estou a tentar ensinar.

se pretendes ter uma resposta direta, sem explicação e sem desenvolvimento, basta dizer, que de certeza irá aparecer alguém te a dará.

Um caracter é um tipo de dados.

errado. um caracter é a interpretação de um valor numérico codificado em 1 byte num desenho alphanumérico representado pela tabela ASCII

sendo assim, o que é quando escreves 'a' no código ?

nota : se não responderes, ficarei a saber qual a tua posição à abordagem de ajuda que estou a tomar


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

"errado. um caracter é a interpretação de um valor numérico codificado em 1 byte num desenho alphanumérico representado pela tabela ASCII"

Sendo assim, penso que será o número do caracter 'a'.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

sendo então o valor numérico que será interpretado como o caracter 'a' (que neste caso é o valor decimal de 97), qual o valor (numérico) do caracter '1' ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

Inicialmente, a minha resposta seria que a string "123" seria, exactamente, 123.

Mas agora, penso que serão os respectivos valores de '1', '2' e '3'.

Estou um pouco confuso. Está correcto?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Estou um pouco confuso. Está correcto?

quase correto, falta o carater final : o zero

conclusão, a string "123" é na realidade o array {'1', '2', '3', 0} que é na realidade o array{49, 50, 51, 0}

agora que sabes o que é uma string, olha para o problema inicial.

tens uma string "PT50XX...XX", por outras palavras, tens o array de bytes com números que serão interpretados como os caracteres alphanuméricos da string.

o que achas que estás a fazer mal no primero código ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

Será que o compilador não vai interpretar os XXXX.....XXXX números, como números propriamente ditos, mas sim como os números que eles representam na tabela ASCII?

Neste momento, isto foi o mais longe que cheguei:

int i;
   char iban[25];
   char iban2[27];

   /*for(i=0; i!='\0'; i++)	  //ciclo para introduzir uma string
   {
    scanf("%s", iban);
   }*/
   gets(iban);

   if(iban[0] > 64 && iban[1]< 91 && iban[2]=='5' && iban[3]=='0' && iban[23]=='7' && iban[24]=='2')
   {
    for(i=0; i<21; i++)
    {
	    iban2[i]=iban[i+4];

    }
    iban2[21]='2';
    iban2[22]='9';
    iban2[23]='2';
    iban2[24]='4';
    iban2[25]='5';
    iban2[26]='0';

    puts(iban2);
   }




}

Sendo que ele me imprime a string a partir de PT50, mas no final imprime 72(e outro caracter).

Editado por pedro_nuno

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

isso é um problema para a divisão por 97, não o problema que tens no código

olha bem para as seguintes linhas do teu código:

for(i=0; i<25; i++)
{
 iban2[i]=iban[i];
 iban2[23]=29;
 iban2[24]= 25;
 iban2[25]=5;
 iban2[26]=0;
}

o que podes dizer sobre isto ? agora que sabes o que é uma string ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

O bloco de código que postei acima ainda diz respeito ao meu problema inicial. Ainda não implementei a divisão por 97.

Apenas desenvolvi o meu problema inicial, e postei acima o meu progresso.

Peço desculpa se gerou confusão.

Fiz uma actualização no bloco de código que coloquei há pouco.

O output do programa agora faz o que eu quero, ou seja, imprime o 292550 no final, mas ainda tem um problema.

É que no final volta a imprimir a string original e ainda mais um caracter depois do 72.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

É que no final volta a imprimir a string original e ainda mais um caracter depois do 72.

vamos voltar à pergunta inicial :

- o que é uma string ?

resposta :

- é um vector de carateres que termina com o valor 0

assim sendo, quantos bytes necessitas para guardar o iban ?

e quantos bytes necessitas para guardar o iban alterado ?

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

vamos voltar à pergunta inicial :

- o que é uma string ?

resposta :

- é um vector de carateres que termina com o valor 0

assim sendo, quantos bytes necessitas para guardar o iban ?

e quantos bytes necessitas para guardar o iban alterado ?

se o iban original tem 25 caracteres, então necessitas de 25 + 1 (zero final)

se o iban alterado tem 27 caracteres, então necessitas de 27 + 1 (zero final)

o teu problema é sempre a falta do zero final


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedro_nuno

Mas então isso quer dizer que se eu tiver uma string por exemplo "123", então preciso de 4 bytes?

Um byte para cada caracter e outro ainda para o '\0' ?

Obrigado

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.