Ir para conteúdo
Fórum Script Brasil
  • 0

Inverter Frase


viciado

Pergunta

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;
}

Link para o comentário
Compartilhar em outros sites

25 respostass a esta questão

Posts Recomendados

  • 0

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);
}

Link para o comentário
Compartilhar em outros sites

  • 0

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);
}

Link para o comentário
Compartilhar em outros sites

  • 0

#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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Boa dica, vlw

Tentei 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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

correcao[j] = '';, não

correcao[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 destino

Cuidado ao criar o contador para percorrer a string. Ele será incrementado de 2 em 2

Link para o comentário
Compartilhar em outros sites

  • 0
#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;
}

Link para o comentário
Compartilhar em outros sites

  • 0
puts, ponteiro complicou

Essa frase não pode ser proferida por um estudante de C

Estude ponteiros. É muito importante

Dá 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 por Beraldo
Link para o comentário
Compartilhar em outros sites

  • 0

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.html

Verifique 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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...