Jump to content
Inacabado

Sequência em getchar()

Recommended Posts

Inacabado

Muito bom dia a todos, uma boa semana a todos e um cumprimento muito especial, cheio de carinho ao HH.

Ora bem eu tinha este problema que estou a resolver de uma serie de exercícios do livro C primer Plus do Stephen Prata:

"Write a program that reads input up to # and reports the number of times that the
sequence ei occurs."

Nao e para me armar em bom mas consegui resolver o problema, mesmo antes de postar o problema aqui no forum.

Ja andava com este problema a 2 dias (nos tempos vagos, obviamente) e estava a ficar cansado e decepcionado.

Ora bem numa primeira fase fiz este codigo:

  2 #include <stdio.h>
  3 
  4 int main(void)
  5 {
  6         char ch,ch0;
  7         int seq_ct=0;
  8         printf("Please insert some lines of text:\n");
  9         while((ch=getchar())!='#')
 10         {
 11                 if(ch=='e')
 12                 {
 13                         ch0=ch;
 14                 }
 15                 else if(ch=='i'&&ch0=='e')
 16                 {
 17                         seq_ct++;
 18                 }
 19                 putchar(ch);
 20         }
 21         putchar('\n');
 22         printf("The sequence \"ei\" apears %2d times.\n",seq_ct);
 23         printf("Bye! See you around...\n");
 24 return 0;
 25 }

Mas obviamente que nao era o codigo certo pois se eu inserisse, por exemplo: jfalsdeijkjejkjlkji. ele dava-me que a sequencia "ei" tinha aparecdido duas vezes o que nao e verdade!

Hoje antes, de ir trabalhar (sim, empregado de armazem, carregar caixas! Dah...!) decidi postar a duvida aqui no forum, pois ja estava a ficar sem animo e na verdade decepcionado. Mas a laia de honestidade e seriedade resolvi fazer um ultimo esforco e concentrar-me bem, para que nao fosse pedir ajuda sem a merecer. O que eu iria perguntar numa primeira fase, era se dava para fazer este exercicio sem recorrer a arrays, pois o programa teria de "relembrar" o caracter precedente. Ora bem eu tinha um handicap, no capitulo que li nao se falou em arrays, mas sim em: if, else, switch, continue, break, os operadores: && || e ?:, e as funcoes getchar e putchar. Portanto teria de dar para resolver o exercicio com estas "armas", e nao recorrer a arrays[]...

Com isto em mente e num ultimo esforco, pimba "saiu-me" este codigo:

 1 /* test1.c -- programa de testes */
  2 #include <stdio.h>
  3 
  4 int main(void)
  5 {
  6         char ch,ch0='x';
  7         int seq_ct=0;
  8         printf("Please insert some lines of text:\n");
  9         while((ch=getchar())!='#')
 10         {
 11                 if(ch=='i'&&ch0=='e')
 12                 {
 13                         seq_ct++;
 14                 }
 15                 else
 16                         ch0=ch;
 17                 putchar(ch);
 18         }       
 19         putchar('\n');
 20         printf("The sequence \"ei\" apears %2d times.\n",seq_ct);
 21 return 0;
 22 }

... que duma maneira engenhosa acaba por resolver o problema! E com isto vou trabalhar mais feliz!!!

Agora eu sei de certeza que havera comentarios mais competentes a serem feitos sobre este post, portanto disponham...

Abraco a todos e Obrigado por toda a ajuda que das no forum Happy Hippo, e um desculpa por todos os que nao te agradecem.

Share this post


Link to post
Share on other sites
HappyHippyHippo

desculpa resolver isto em tão pouco código

#include <stdio.h>

int main (int argc, char ** argv) {
    char ch = 0, state = 0;
    unsigned int count = 0;

    printf("Please insert some lines of text:\n");

    while ((ch = getchar()) != '#')
        state = state == 1 && ch == 'i' ? count++, 0 : ch == 'e';

    printf("The sequence \"ei\" appears %2d times.\n", count);

    return 0;
}

 

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.