Ir ao conteúdo

Posts recomendados

Postado

Estou fazendo um programa que ao digitar uma frase, caso tenha as letras "porque" juntas ou só "R" essa palavra seja deletada e o cursor volte as casas. Pois ao digitar

"PQa" ao invés de simplesmente mudar ficar "  a" teria que ficar "a" como inicio da frase.

 

Aqui está o meu código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

main ()
{
    setlocale(LC_ALL,"portuguese");

    char linha[100];
    int l;

    puts("Língua do P");
    puts("");
    printf("Digite a frase: ");
    fgets(linha, 100, stdin);

    for(l = 0; l < 100; l++)
    {
        if(linha[l] == 'P' && linha[l + 1] == 'Q')
        {
            linha[l] = ' ';
            linha[l + 1] = ' ';

        }
        else if(linha[l] == 'R')
        {
            linha[l] = ' ';
        }

    }

    printf("frase: %s", linha);
}

 

  • Amei 1
Postado

@Lucas Assunção de Sousa     então você quer imprimir a palavra digitada , mas sem esses caracteres P e Q , de forma que ela fique organizada sem nenhum espaço entre as letras ,  então seu código com algumas modificações pode ser assim  :

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <locale.h>
void atualiza(char p[100], int t){
    int j;
    for(j=t;j<strlen(p);j++){
        p[j]=p[j+1];
        if(p[j]=='\n')p[j]='\0';
    }
}
int main (){
    char linha[100];
    int l;
    setlocale(LC_ALL,"");
    puts("Língua do P");
    puts("");
    printf("Digite a frase: ");
    fgets(linha, 100, stdin);
    for(l = 0; l < 100; l++){
        if(toupper(linha[l]) == 'P' && toupper(linha[l + 1]) == 'Q'){
            linha[l] = ' ';
            linha[l + 1] = ' ';
            atualiza(linha,l);
        }
        else{
            if(toupper(linha[l]) == 'R'){
                linha[l] = ' ';
                atualiza(linha,l);
            }
        }
    }
    printf("frase: %s\n\n", linha);
    return 0;
}

 

  • Obrigado 1
  • Membro VIP
Postado

Olá.

 

@Lucas Assunção de Sousa, sobre:

 

18 horas atrás, Lucas Assunção de Sousa disse:

Estou fazendo um programa que ao digitar uma frase, caso tenha as letras "porque" juntas ou só "R" essa palavra seja deletada e o cursor volte as casas. Pois ao digitar "PQa" ao invés de simplesmente mudar ficar "  a" teria que ficar "a" como inicio da frase.

 

As características do programa depende principalmente do enunciado, ou seja, aparentemente você postou a "tua interpretação sobre o que deve ser feito", mas seria interessante também postar "o que literalmente foi pedido". Veja, não adiantaria fazer um código dar uma resposta "correta", mas se a "forma" que foi encontrada a resposta não corresponde ao enunciado...

 

O enunciado pode determinar O QUE quer ser feito, e também o COMO deve ser feito.

 

RESUMINDO:
Por favor, posta o enunciado para analisarmos antes.

 

 

No aguardo.

  • Curtir 1
Postado
1 hora atrás, Simon Viegas disse:

Olá.

 

@Lucas Assunção de Sousa, sobre:

 

 

As características do programa depende principalmente do enunciado, ou seja, aparentemente você postou a "tua interpretação sobre o que deve ser feito", mas seria interessante também postar "o que literalmente foi pedido". Veja, não adiantaria fazer um código dar uma resposta "correta", mas se a "forma" que foi encontrada a resposta não corresponde ao enunciado...

 

O enunciado pode determinar O QUE quer ser feito, e também o COMO deve ser feito.

 

RESUMINDO:
Por favor, posta o enunciado para analisarmos antes.

 

 

No aguardo.

 

Bem isso foram problemas passados numa maratona de programação que eu participei e quis refazê-los para poder praticar. Basicamente o que o @devair1010 deu "certo", pois faltou retornar a variável p.

Língua do PQR.jpg

  • Curtir 2
  • Membro VIP
Postado

Pronto, tendo o enunciado, fica tudo mais claro.

 

O enunciado basicamente está pedindo para receber uma frase, e exiba uma outra... ai precisa entender quais as diferenças entre um e outra.... basicamente a segunda é "a primeira frase sem algumas sequências de caracteres específicos".

 

 

RESUMINDO:

Você imaginou "deletar caracteres", ok! Mas no seu código, você está "substituindo por outro caractere", o que é diferente. Deletar é uma coisa. Colocar outra no lugar é outra.

 

Daí:
- ou você encontra uma forma de deletar os caracteres da frase;

- ou imprimir apenas o que pode ser impresso.

- ou acha outra solução.

 

Tente imaginar como seria possível deletar os caracteres desejados OU tente imaginar como imprimir os caracteres desejados... (ou tente imaginar outra forma).

 

obs.: a sugestão seria que você imaginasse uma forma de resolver. Você imaginou "deletar", mas implementou "substituir", como já citado, não atende ao que precisa. Tente imaginar outra forma de deletar... e ajudaríamos a implementar o que você pensou. Se dissermos como substituir (ou não imprimir), estaremos responder o desafio por você.

 

Perceba que o desafio fio proposto para você... e você que aceitou desafiá-lo novamente... a minha forma de pensa é que o fórum vai te ajudar a "traduzir o que você imagina em C", e por sua vez, toda a criatividade deve vir de você.

 

 

No aguardo.

  • Curtir 1
  • Obrigado 1
Postado
7 horas atrás, Simon Viegas disse:

Pronto, tendo o enunciado, fica tudo mais claro.

 

O enunciado basicamente está pedindo para receber uma frase, e exiba uma outra... ai precisa entender quais as diferenças entre um e outra.... basicamente a segunda é "a primeira frase sem algumas sequências de caracteres específicos".

 

 

RESUMINDO:

Você imaginou "deletar caracteres", ok! Mas no seu código, você está "substituindo por outro caractere", o que é diferente. Deletar é uma coisa. Colocar outra no lugar é outra.

 

Daí:
- ou você encontra uma forma de deletar os caracteres da frase;

- ou imprimir apenas o que pode ser impresso.

- ou acha outra solução.

 

Tente imaginar como seria possível deletar os caracteres desejados OU tente imaginar como imprimir os caracteres desejados... (ou tente imaginar outra forma).

 

obs.: a sugestão seria que você imaginasse uma forma de resolver. Você imaginou "deletar", mas implementou "substituir", como já citado, não atende ao que precisa. Tente imaginar outra forma de deletar... e ajudaríamos a implementar o que você pensou. Se dissermos como substituir (ou não imprimir), estaremos responder o desafio por você.

 

Perceba que o desafio fio proposto para você... e você que aceitou desafiá-lo novamente... a minha forma de pensa é que o fórum vai te ajudar a "traduzir o que você imagina em C", e por sua vez, toda a criatividade deve vir de você.

 

 

No aguardo.

Entendi, um não trabalhei muito usando strings em C. Basicamente só foi uma semana de aprendizado e pulamos pro próximo assunto, mas eu entendi.

 

Eu estou usando apenas uma variável como entrada de dados que vai exibir a frase que o usuário vai digitar, nesse caso como eu não consigo deletar e estou apenas substituindo por um espaço vazio, talvez a melhor solução seria então ter uma segunda variável que receba os caracteres diferentes de porque, R e vazio e jogá-los nessa segunda string. Ai então a segunda variável vai imprimir a frase certinho... Acho que entendi, vou tentar isso!

  • Curtir 2
  • Membro VIP
Postado
17 horas atrás, Lucas Assunção de Sousa disse:

talvez a melhor solução seria então ter uma segunda variável que receba os caracteres diferentes de porque, R e vazio e jogá-los nessa segunda string

 

Não sei se é "a melhor", mas é uma boa solução!!! :)

 

 

Substituir por " " não é válido, pois a frase final tem que ficar como no exemplo.

  • Curtir 1
Postado

Então, eu tentei aplicar a minha nova lógica, mas não funcionou. Tentei separar por if/else if e também por um if só, mas não está indo. Quando fiz usando apenas uma condição (no caso checando seu a string tinha uma letra P) substituía por x.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>

main ()
{
    setlocale(LC_ALL,"portuguese");

    char linha[100];
    char linha2[100];
    int l;

    puts("Língua do P");
    puts("");
    printf("Digite a frase: ");
    fgets(linha, 100, stdin);

    for(l = 0; l < 100; l++)
    {
        if((toupper(linha[l]) != 'P' && toupper(linha[l + 1]) != 'Q') && toupper(linha[l]) != 'R' || linha[l] != ' ')
        {
            linha2[l] = linha[l];

        }
    }

    printf("frase: %s", linha2);
    return 0;
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...