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

deathseeker25

[Resolvido] Código quase completo - Ultima duvida

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim já percebi...isso vai-me ser util em certos casos... :D

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link 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