viciado Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 O programa finaliza a tarefa antes de imprimir a frase#include <stdio.h> #include <stdlib.h> int main() { char frase[50]; char inverter[50]; int i; int j = 0; printf("Digite uma frase \n"); fgets(frase, 50, stdin); int tam = strlen(frase); for(i=0;i<tam;i++){ inverter[j] = strrev(frase[i]); j++; } printf("\n \n %s \n \n",inverter); system("PAUSE"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Achei esse codigo na internet, alguém sabe como funciona os dois for, se possivel poderia me explicar ?#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char frase[100]; char inverter[100]; printf("Digite uma frase \n"); gets(frase); int tam = strlen(frase); int i; for(i=0;i<100;i++){ inverter[i] = ''; } for(i=0;i<tam;i++){ inverter[(tam-i-1)] = frase[i]; } printf("\n %s",inverter); system("PAUSE"); return (0); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Tentei utilizando esse codigo fazer para substituir, depois de inverter, as consoantes por #O programa trava e finaliza#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char frase[100]; char inverter[100]; printf("Digite uma frase \n"); gets(frase); int tam = strlen(frase); int i; for(i=0;i<100;i++){ inverter[i] = ''; } for(i=0;i<tam;i++){ inverter[(tam-i-1)] = frase[i]; } int j = 0; char caracter[tam]; for(i=0;i<tam;i++){ if(inverter[i] != 'a' || inverter[i] != 'e' || inverter[i] != 'i' || inverter[i]!= 'o' || inverter[i] != 'u'){ caracter[j] = strset(inverter[i], '#'); j++; } } printf("\n %s \n",inverter); return (0); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char frase[50]; char inverter[50]; int i; int j = 0; printf("Digite uma frase \n"); fgets(frase, 50, stdin); int tam = strlen(frase); for(i=tam - 1;i>=0;i--){ inverter[j] = frase[i]; j++; } inverter[j] = ''; printf("\n %s \n \n",inverter); return 0; }Basta ler a string original do fim para o começo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Esse seu método é mais fácil. Você sabe como posso resolver aquele problema de trocar as consoantes por # ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 Percorra a string, caractere, por caractere. Se o caractere corrente for consoante, troque-o por #:if ( str[i] != 'a' && str[i] != 'e' ... && str[i] != 'u' ) str[i] = '#'; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 Ainda pode ser um símbolo ou algo assim.Fiz esta função rapidamente:int isConsonant(char key) { switch(key) { case 0x41: case 0x45: case 0x49: case 0x4F: case 0x55: case 0x61: case 0x65: case 0x69: case 0x6F: case 0x75: return 0; } if(((key < 0x41) || (key > 0x7A)) || ((key > 0x5A) || (key < 0x61))) return 0; return 1; }Primeiro ela verifica se é uma vogal, se for, retorna 0 direto.Se não, verifica se está no range dos caracteres do alfabeto (A-z).Mas como no range A-z ainda tem alguns símbolos, verifica se está neste range.Se passar em todos os testes (for uma consoante), retorna 1.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Resolvido obrigado#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char frase[50]; char inverter[50]; int i; int j = 0; printf("Digite uma frase \n"); fgets(frase, 50, stdin); int tam = strlen(frase); for(i=tam - 1;i>=0;i--){ inverter[j] = frase[i]; j++; } inverter[j] = ''; for(i=0;i<tam;i++){ if(inverter[i] != 'a' && inverter[i] != 'e' && inverter[i] != 'i' && inverter[i] != 'o' && inverter[i] != 'u'){ inverter[i] = '#'; } } printf("\n %s \n \n",inverter); system("PAUSE"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 O Durub lembrou uma coisa importante: tem que verificar se é letra. Senão o programa vai trocar números por # também. ;)Dá para usar is_alpha() Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 É verdade, isalpha da ctype.h.http://www.cplusplus.com/reference/clibrar...pe/isalpha.htmlAbraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Boa dica, vlwTentei fazer um programa que verifica os espaços em branco e informe o numero de palavras digitadas. Mais tenho como resposta sempre 0#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char frase[50]; char correcao[50]; int i = 0; int j = 0; printf("Digite uma frase \n"); fgets(frase, 50, stdin); int tam = strlen(frase); while(i<tam){ correcao[j] = frase[i]; if(frase[i] == ' '){ while(frase[i] == ' ') i++; } else{ i++; } j++; } int count = 0; for(j=0;i<tam;j++){ if(correcao[j] == ' '){ count++; } } printf(" há %d palavras \n",count); system("PAUSE"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 for(j=0;i<tam;j++){Aqui está o erro: provavelmente você quer j < tam.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 mesmo utilizando j continuo tendo 0 como resposta Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 (editado) inicie o contador em 1, poia a primeira palavra não começa com espaço. ;)certifique-se de estar entrando uma frase com espaços... Editado Dezembro 10, 2008 por Beraldo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Sim eu estou colocando os espaços, substituindo o contator para 1 da na mesma so que agora imprimi 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 aqui funciona certinho:#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char frase[50]; char correcao[50]; int i = 0; int j = 0; printf("Digite uma frase \n"); fgets(frase, 50, stdin); int tam = strlen(frase); while(i<tam){ correcao[j] = frase[i]; if(frase[i] == ' '){ while(frase[i] == ' ') i++; } else{ i++; } j++; } correcao[j] = ''; int count = 1; for(j=0;j<tam;j++){ if(correcao[j] == ' '){ count++; } } printf(" há %d palavras na frase: %s \n",count, correcao); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 Faltava esse comando depois do while: correcao[j] = '';Agora ta funcionando obrigadoTEnho outra duvida aqui, tem como duplicar cada caractere de uma fraserecebe => brasilsaída => bbrraassiill? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 correcao[j] = '';, nãocorrecao[j] = '';No gcc, se usar '' o programa nem compila. Tem que usar ''Dá para duplicar letras, sim.Aloque uma matriz com o dobro do tamanho da original. Ao ler a string original salve a letra corrente duas vezes na string de destinoCuidado ao criar o contador para percorrer a string. Ele será incrementado de 2 em 2 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 (editado) Como eu vou salvar a letra duas vezes ? gets? fgets? Editado Dezembro 10, 2008 por viciado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 10, 2008 Denunciar Share Postado Dezembro 10, 2008 Esqueça gets(). Ela não faz mais parte de sua vida. Só use fgets :PMas você só usará fgets() para pegar a palavra digitada. Você vai gerar a palavra com letras duplicadas manualmente, caractere por caractere. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 10, 2008 Autor Denunciar Share Postado Dezembro 10, 2008 isso eu não entendifgets(str1, 30, stdin); Como duplico as letras ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 11, 2008 Denunciar Share Postado Dezembro 11, 2008 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[100], *str2; int tam, i = 0, j = 0; fgets(str, 100, stdin); tam = strlen(str); if ( (str2 = (char *) malloc(tam * 2 + 1 * sizeof(char))) == NULL ) { fprintf(stderr, "Erro de alocação\n"); exit(1); } for(i = 0; i < tam; i++) { *(str2 + j) = str[i]; *(str2 + j + 1) = str[i]; j += 2; } printf("%s\n", str2); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 11, 2008 Autor Denunciar Share Postado Dezembro 11, 2008 puts, ponteiro complicou Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 11, 2008 Denunciar Share Postado Dezembro 11, 2008 (editado) puts, ponteiro complicouEssa frase não pode ser proferida por um estudante de CEstude ponteiros. É muito importanteDá para fazer esse programa sem ponteiros, mas ficará tudo estático, sem alocação dinâmica. É mais feio, mas....É só trocar *(str +i) por str Editado Dezembro 11, 2008 por Beraldo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 viciado Postado Dezembro 11, 2008 Autor Denunciar Share Postado Dezembro 11, 2008 Por que esses codigos funcionam no windows com o dev e no linux com o gcc da falha de segmentação ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 11, 2008 Denunciar Share Postado Dezembro 11, 2008 VocÊ se refere a '' e ''?Acho que '' não é padrão ANSI C e o gcc não aceita. O Dev deve gerar um Warning (aviso), talvez.Há gcc para Windows. Instale e faça um teste:http://gcc.gnu.org/install/binaries.htmlVerifique se você habilitou a emissão de Warnings no compilador. Apesar de eles não mipediram a compilação, é bom fazer os programas corretamente, sem emissão de Warnings. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
viciado
O programa finaliza a tarefa antes de imprimir a frase
Link para o comentário
Compartilhar em outros sites
25 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.