Ir ao conteúdo
  • Cadastre-se
Lucas Assunção de Sousa

C Fazer a posição do vetor retornar para trás.

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×