Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
i307

Encriptar Strings

Recommended Posts

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 */
}

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Localhost

Atenção aos erros que apontei sobre o return e afins.

Quanto às maiusculas utilizas a função toupper.


here since 2009

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.