ericio 0 Denunciar post Postado Novembro 23, 2009 Tenho um exercício que diz : Escreva uma função f(palavra1,palavra) a qual recebe como parametro duas palavras e deve retornar uma palavra que contenha somente os caracteres comuns nas duas, independente da sua posição. Comecei a fazer mas não sei como fazer para o vetor da nova palavra receber os caracteres comuns.. #include "stdafx.h" #include "stdio.h" char resultado[30]; void (char plv1[30],char plv2[30]) { int i,j; for (i=0;i<30;i++) { for (j=0;j<30;j++) { if (plv1[i]==plv2) } int main(int argc, char* argv[]) { char palavra1[30],palavra2[30]; printf(" Entre com duas palavras :\n"); gets (palavra1); gets(palavra2); resultado [30] = palavras(palavra1,palavra2); return 0; } :mellow: Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 23, 2009 #include "stdafx.h" #include "stdio.h" Sou capaz de apostar meus braços que isso é Dev C/C++... Se for, jogue fora e pegue uma IDE tipo Eclipse, Netbeans ou Code::Blocks, e não qualquer bagulho que você encontrar na internet. void (char plv1[30],char plv2[30]) { int i,j; for (i=0;i<30;i++) { for (j=0;j<30;j++) { if (plv1[i]==plv2) } Conserte isso primeiro. E pela 129382739817492ª vez: não use gets!. Compartilhar este post Link para o post Compartilhar em outros sites
ericio 0 Denunciar post Postado Novembro 23, 2009 O que usar no lugar de "gets" então? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 24, 2009 Use a busca do fórum. Tem tópico sobre isso. Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 24, 2009 kra como é C, use: scanf("%s %s",&palavra1,&palavra2); Ele vai ler as duas separadas por espaço! Sou capaz de apostar meus braços que isso é Dev C/C++... Essa foi ótima _Isis_! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 24, 2009 Scanf também dá problema. Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 24, 2009 Nuss... _Isis_ se não é pra ele nem usar gets() nem scanf(), usando C, o que ele tem que usar? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 24, 2009 Depende, scanf não da problema se for bem usado. Da pra ler apenas 29 caracteres da stream de entrada, sem correr riscos de um segfault: scanf("%29s%*[^\n]%*c", str); Compartilhar este post Link para o post Compartilhar em outros sites
Yur1T3ch 0 Denunciar post Postado Novembro 25, 2009 - O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim). - O gets captura espaços e afins, mas não permite limitar o tamanho da entrada. A solução que uso, que considero perfeita (permitam-me achar), é o fgets. O próprio nome diz que o uso comum dele é para leitura de arquivos, mas você pode passar como stream 'stdin' (standard input), ou seja, o teclado. Essa função une o melhor do scanf com o melhor do gets, permitindo limitar o tamanho da entrada e capturar espaços. Use assim, por exemplo: char string[81]; fgets(string,sizeof(string),stdin);Só deve-se ter atenção que, como lendo um arquivo com o fgets, a função só para quando encontrar um caracter de quebra de linha '\n' (neste caso, pressionar ENTER acaba por encerrar a captura da entrada). A menos que o tamanho da entrada seja maior ou igual ao tamanho da string menos um, os dois últimos caracteres sempre serão '\n' e '\0'. Por isso, costumo fazer assim para eliminar este '\n'. char string; int tamanhoString; fgets(string,sizeof(string),stdin); tamanhoString=strlen(string); if(tamanhoString<sizeof(string)-1) string[tamanhoString-1]='\0'; else if(string[sizeof(string)-2]=='\n') string[sizeof(string)-2]='\0'; Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Novembro 25, 2009 - O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim). - O gets captura espaços e afins, mas não permite limitar o tamanho da entrada. A solução que uso, que considero perfeita (permitam-me achar), é o fgets. O próprio nome diz que o uso comum dele é para leitura de arquivos, mas você pode passar como stream 'stdin' (standard input), ou seja, o teclado. Essa função une o melhor do scanf com o melhor do gets, permitindo limitar o tamanho da entrada e capturar espaços. Use assim, por exemplo: char string[81]; fgets(string,sizeof(string),stdin);Só deve-se ter atenção que, como lendo um arquivo com o fgets, a função só para quando encontrar um caracter de quebra de linha '\n' (neste caso, pressionar ENTER acaba por encerrar a captura da entrada). A menos que o tamanho da entrada seja maior ou igual ao tamanho da string menos um, os dois últimos caracteres sempre serão '\n' e '\0'. Por isso, costumo fazer assim para eliminar este '\n'. char string; int tamanhoString; fgets(string,sizeof(string),stdin); tamanhoString=strlen(string); if(tamanhoString<sizeof(string)-1) string[tamanhoString-1]='\0'; else if(string[sizeof(string)-2]=='\n') string[sizeof(string)-2]='\0'; Dá pra simplificar char string; //[blablabla] int tamanhoString; fgets(string,sizeof(string),stdin); tamanhoString=strlen(string); if(string[tamanhoString - 1] == '\n') string[tamanhoString - 1]='\0'; Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Novembro 25, 2009 O scanf permite limitar o número de caracteres que serão 'aceitos', mas não é capaz de capturar espaços e afins (interpreta como delimitador ou algo assim) Repetindo, é só saber usar o scanf... scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str); Dessa forma os caracteres estão limitados, e aceita espaços... http://linux.die.net/man/3/scanf Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Novembro 25, 2009 Nuss... Como faço pra mostrar esses caracteres? Eles mostram apenas até o espaço em branco! Usei printf e puts! Tipo: puts(total[h].s); Depois de usar a linha que você colocou acima: scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str); Compartilhar este post Link para o post Compartilhar em outros sites
Brown. 1 Denunciar post Postado Dezembro 11, 2009 Cara você usa os comandos que você achar melhor, não porque as pessoas acham que você deve usar isso ou aquilo. Qualquer um pode escrever código que o computador pode entender. Bons programadores escrevem código que seres humanos pode entender. Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Dezembro 11, 2009 Cara você usa os comandos que você achar melhor, não porque as pessoas acham que você deve usar isso ou aquilo. Qualquer um pode escrever código que o computador pode entender. Bons programadores escrevem código que seres humanos pode entender. http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Não pode user gets(), scanf(), fflush(stdin) mimimmmimimimi, faça me o favor. Concordo com você. Sem mais! O que você ja fez ? Posta ae. Conseguiu ? Compartilhar este post Link para o post Compartilhar em outros sites
echo "VINICIUS" 3 Denunciar post Postado Dezembro 11, 2009 depois de tantas dicas post ai o que ja foi feito como nosso amigo acima propos, com certeza ja da pra concluir seu trabalho... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Dezembro 12, 2009 Não pode user gets(), scanf(), fflush(stdin) mimimmmimimimi, faça me o favor. Faça-me o favor você. Tem um post explicando isso nesse fórum e você inclusive comentou nele. Se não quiser ler no fórum, tem no Google, mas tratar isso como se fosse frescura de desenvolvedor é típico de gente restrita a windows, compiladores borland, headers antigos e que não estão nem aí pra buffer overflow, padrões de linguagem e pra falar a verdade, nem sequer consideram a chance de aprender a programar usando outra plataforma ou IDE. Depois que postam em negrito, tamanho 20 e fonte vermelha acham que estão ofendendo a mãe e fazem pouco caso. PS: se alguém aqui acha que eu peguei pesado, 1)não tô ligando porque eu tô falando uma verdade, 2) Vocês não viram nada. Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Dezembro 12, 2009 Até concordo com a _Isis_, pois usar os comandos com os quais o sistema vai responder melhor e tornar o código mais limpo e portável, pra mim, é essencial. Algo que faz parte das boas práticas de programação! Como no caso do fflush(stdin)... O uso do token é muito mais interessante! E não dói... Mas, depende de cada um... Concordo também quando diz que isso é coisa de gente restrita a Windows e, mais especificamente, a Delphi... Pois, faz o programa e se funcionar... funcionou! Enfim, eu acho sempre importante ver o porquê de usar ou não certos comandos. Apesar de que a _Isis_ não me respondeu porque o scanf() dá erro e qual comando ela usaria pra ler strings com espaços e também o porquê, mas estou aí aguardando! Abçs... Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Dezembro 12, 2009 Apesar de que a _Isis_ não me respondeu porque o scanf() dá erro e qual comando ela usaria pra ler strings com espaços e também o porquê, mas estou aí aguardando! Fala iCl4w, tudo certo? não é que o scanf da erros, é que o scanf é "chato" de usar. Vamos "dissecar" o scanf que eu postei ali em cima: scanf("%29[a-zA-Z0-9 ]%*[^\n]%*c", str); Aqui, dizemos para o scanf ler um limite de 29 caracteres. Esses caracteres podem ser: 'a', 'b', 'c', 'd', 'e', 'f', ...., 'z' (representado por a-z) podem ser também: 'A', 'B', 'C', 'D', ..., 'Z' (representado por A-Z) podem ser também: '0', '1', ..., '9' (representado por 0-9) Ou, podem ser um espaço em branco. representado pelo próprio espaço em branco. Agora, vamos descarcar tudo, até encontrarmos um '\n'. vale lembrar que, pode ocorrer de não descartarmos nada, pois não há excesso de informação ali. Agora descartamos um caratere, que com certeza absoluta será um '\n', pois é o que faltou descartar. Exemplos: "teste1 teste2 teste3\n" "teste1 teste2 teste3 teste4 teste5 teste6\n" Compartilhar este post Link para o post Compartilhar em outros sites
iCl4w 0 Denunciar post Postado Dezembro 12, 2009 não é que o scanf da erros, é que o scanf é "chato" de usar. Olá, VictorCacciari... Tá tudo beleza! Sobre o scanf(); eu já conhecia o funcionamento da leitura dos dados do scanf que você colocou... Mas, foi boas... Ao menos você mostrou que o problema do scanf é sua chatice. Vou utilizar o fgets(); que não precisa de tantas definições pra ler espaços. Obrigado kra! Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Dezembro 12, 2009 com certeza, vá de fgets que é a melhor coisa! O scanf é bacana para ler dados formatados, e ja efetuar conversões do tipo string -> int, string -> float, etc... Algo do tipo: printf("Digite a sua data de nascimento: "); scanf("%d%*c%d%*c%d", &dia, &mes, &ano); Mas, se a ideia é ler uma string, fgets é o caminho! Abraços Compartilhar este post Link para o post Compartilhar em outros sites