deathseeker25 Posted September 10, 2005 at 12:18 AM Report #4798 Posted September 10, 2005 at 12:18 AM 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
Solution Bruno Posted September 10, 2005 at 01:10 PM Solution Report #4803 Posted September 10, 2005 at 01:10 PM Basta alterares o teu scanf para: scanf("%[^\n]s", texto); Tenta 😄
deathseeker25 Posted September 10, 2005 at 05:25 PM Author Report #4813 Posted September 10, 2005 at 05:25 PM Basta alterares o teu scanf para: scanf("%[^\n]s", texto); Tenta 😄 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 🙂
Bruno Posted September 10, 2005 at 07:14 PM Report #4825 Posted September 10, 2005 at 07:14 PM 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 😄
deathseeker25 Posted September 10, 2005 at 07:22 PM Author Report #4826 Posted September 10, 2005 at 07:22 PM Assim já percebi...isso vai-me ser util em certos casos... 😄 Cumps
redhat Posted September 12, 2005 at 10:47 AM Report #4917 Posted September 12, 2005 at 10:47 AM epah isso eh mto mto bom... mas..... (claro tem um mas) isso tem alturas em que estoura! 😄 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! 😄 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
Bruno Posted September 12, 2005 at 11:39 AM Report #4919 Posted September 12, 2005 at 11:39 AM 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 😄
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now