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

i307

Encriptar Strings

Mensagens Recomendadas

i307

Boas

eu tenho de fazer um programa para encriptar strings. Eu tenho aqui a tabela de encriptação então resolvi testar para o 'A' e não correu muito bem. Ainda não sei o suficiente de strings , espero que me possam ajudar.

Tenho isto :

int encripta (char s[]);

int main()
{
    char s[50+1]; /* + terminador */

    printf("Escreva a string");
    scanf("%s",s);                  /* recebe  string */

    encripta(s);

    printf("%s",s);
}
int encripta (char s[]) {
    int aux;
  for (aux=0; aux <5 ; aux++) {        /* Se o vector tiver caracter = A , substitui por um D */
        if (s[aux] = "A")
        s[aux]= "D";
    }
return s; /* retorna a string */
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

if (s[aux] = "A")
        s[aux]= "D";

Estas 2 instruçõe estão mal. Na 1ª tens de usar o operador de igualdade == e não o de atribuição =.

Na 2ª, estás a atribuir uma string a uma posição onde deve estar um caracter. Troca as aspas para plicas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Tens aí alguns erros.

if (s[aux] = "A")

Esta condição está mal. Tens de usar o operador de comparação de igualdade e não o operador de atribuição.

E como é só um caracter fica: 'A'. Isto igual para a atribuição que fazes em baixo.

Depois, não precisas de retornar a string. Aliás tu não estás a recebê-la sequer. E ainda por cima a função está definida como int quanto ao seu tipo de retorno. Mete void e deixa tudo igual, excepto com as alterações.

Não te vou estar a explicar porque é que não precisas de retorná-la porque parece-me que ainda não chegaste a ponteiros.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
i307

if (s[aux] = "A")
        s[aux]= "D";

Estas 2 instruçõe estão mal. Na 1ª tens de usar o operador de igualdade == e não o de atribuição =.

Na 2ª, estás a atribuir uma string a uma posição onde deve estar um caracter. Troca as aspas para plicas.

:-[

Sim , foi mesmo um erro básico...  :wallbash:

Isso das aspas fui eu que mudei depois da primeira tentativa para ver se dava. Obrigado.

O que agora precisava de saber era como mudar as letras que são introduzidas automaticamente para maiúsculas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
i307

Isso do return já corrigi  :)

Agora gostaria que explicasses dos ponteiros porque já lá cheguei , mas aqui não estou a utilizar ponteiro nenhum portanto não estou a perceber. Ou o char mexe directamente com a memória?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Sempre que utilizas um array utilizas um ponteiro porque o nome do array é na verdade um ponteiro para o seu primeiro elemento.

Com isso tu ao passares para a função encripta o nome da string estás a passar o endereço do seu primeiro elemento, ou seja, já podes trabalhar com ela directamente.

Quanto ao return, tu não podes fazer simplemente return de uma string porque como já te expliquei o nome da string é um ponteiro. Tu ao fazeres return retornas o endereço. Como ela é destruída no final da função vais depois a estar a trabalhar em algo indefinido. Isto não acontece no teu caso porque a string está declarada na função main, no entanto, é um bocado redundante o que estás a fazer porque estás a atribuir a uma string o que ela já contêm :x


here since 2009

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.