Jump to content
Sign in to follow this  
deathseeker25

[Resolvido] Código quase completo - Ultima duvida

Recommended Posts

deathseeker25

Boas,

Como já devem ter lido estou a desenvolver um codificador numerico de texto e resolvi adaptar o código que o utilizador redhat me propôs (era o meu código inicial, com as devidas correcções).

Ora adientei uma linha ou outra para completar o código, assim como algumas melhorias e avanços ou novas regras no código matemático.

O problema é que na execução do programa, só codifica a primeira palavra, seja ela do tamanho que for. Se escrevermos "Heeeeellllllooooooooooooo" ele codifica correctamente. Se escrevermos "sou eu" só codifica "sou".

Aqui fica o código para quem se dispuser a ajudar:

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

#define MAX 5000

// static char text [MAX];
// static int serial;

/* Aqui come?ßa a fase de estrutura?ß?£o do c??digo
que vai servir de apoio para a conversao das diferentes
letras em numero. A serial fui eu que elaborei e inventei
e s?? contem algarismos de 1 a 5, sendo atribuido um conjunto
de 5 numeros diferentes a cada letra do alfabeto. */


int corresponde(char c)
{
  int serial = 0;
  
  switch (c)
  {
    case 'a' : serial=12345;  break;
    case 'b' : serial=22345;  break;
    case 'c' : serial=32345;  break;
    case 'd' : serial=42345;  break;
    case 'e' : serial=52345;  break;
    case 'f' : serial=23345;  break;
    case 'g' : serial=24345;  break;
    case 'h' : serial=25345;  break;
    case 'i' : serial=23445;  break;
    case 'j' : serial=23545;  break;
    case 'k' : serial=23455;  break;
    case 'l' : serial=33455;  break;
    case 'm' : serial=43455;  break;
    case 'n' : serial=53455;  break;
    case 'o' : serial=44455;  break;
    case 'p' : serial=45455;  break;
    case 'q' : serial=44555;  break;
    case 'r' : serial=54555;  break;
    case 's' : serial=55555;  break;
    case 't' : serial=11555;  break;
    case 'u' : serial=12555;  break;
    case 'v' : serial=13555;  break;
    case 'w' : serial=14555;  break;
    case 'x' : serial=15555;  break;
    case 'y' : serial=25555;  break;
    case 'z' : serial=35555;  break;
    case '0' : serial=12341;  break;
    case '1' : serial=22341;  break;
    case '2' : serial=32341;  break;
    case '3' : serial=42341;  break;
    case '4' : serial=52341;  break;
    case '5' : serial=53341;  break;
    case '6' : serial=54341;  break;
    case '7' : serial=55341;  break;
    case '8' : serial=55441;  break;
    case '9' : serial=55541;  break; 
    case ' ' : serial=55551;  break;
   }

  return serial;
}

/*Fun?ß?£o main-->a principal que executa o codigo*/   

main()
{
    char texto[MAX]; 
    int resultado[MAX];
    int comp=0;
    int var=0;

    printf("Introduza o texto: \n");
    scanf("%s", texto) ;
    
    strlwr(texto); /*converte o texto todo para minusculas.
                    Distinçao entre minusculas e maiusculas
                    so na proxima versao.*/     
    
    while( comp!=strlen(texto))
    {
      resultado[comp] = corresponde(texto[comp++]);
  
    }

    while(var!=comp)
    { 
      printf("%d",resultado[var++]);
      
    }

    printf("\n");

    
    system("PAUSE");
    return 0;
} 

Desde já o meu obrigado a quem se dispuser a oferecer ajudas.

Cumps

Share this post


Link to post
Share on other sites
deathseeker25
Basta alterares o teu scanf para:

scanf("%[^\n]s", texto);

Tenta :D

Funcionou....agora gostava de saber quais as vantagens de utilizar o scanf dessa forma e porquê...é que realmente não percebi.

Cumps e obrigado pela ajuda Bruno :)

Share this post


Link to post
Share on other sites
Bruno

Embora n esteja em linux (e portanto n pude verificar):

Se fizeres:

scanf(" %[^a]s ", texto) ;

E escreveres "bca" na variavel texto fica "bc" isto é o "[^...]" diz até onde ele deve considerar! Podes tb fazer coisas mais giras do genero:

scanf(" %[^ \n\\\"]s ", texto) ;

Isto faria com q o texto ficasse com o inserido até ocorrer algo entre " ", "\n", "\" (estão duas para ele reconheçer o caracter especial bem) e " " "!

Espero q tenha sido explicito :D

Share this post


Link to post
Share on other sites
redhat

epah isso eh mto mto bom... mas..... (claro tem um mas) isso tem alturas em que estoura! :D

Eu sei pk ja fiz um trabalho (tenho de falar com o meu partner que o fez a ver se podemos publicar em opensource) e que precisei de eliminar esses \0 (sim.. burrice... pk k o espaço e o final de linha tinham de ter o mm significado... humpf)

Anyways, eu fiz uma funcaozeca que salta os espaços! por acaso tava funcional! :D

Eu dp posto! Tou a fazer as malas and then.. BRAGAAAAAAAAAAA!!!! Ja vos respondo a partir do Departamento de Informatica :)

Abraço!


Software is like sex... it's better when it's free

in the old days

P@P "C" && "Linux" Moderator

Share this post


Link to post
Share on other sites
Bruno

Só postando o codigo é q te posso ajudar de qq modo isso parece-me mto estranho!

N vejo dificuldade em saltar os espaços e alterares o '\0' visto que é mto simples :D

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  

×
×
  • Create New...

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.