Jump to content
batatoon13

[Resolvido] Contagem de números na frase

Recommended Posts

batatoon13

Boas,

Eu ando aqui as voltas com um código e "pesco" pouco ou nada disto, sou novo nesta area.

O que eu pretendo é o seguinte: Inserir uma frase com letras e números e o que eu pretendo que me mostre será quantos números inseri na frase.

Ex: Ola12Mundo56

A frase tem: 4 números.

printf ("por favor escreva uma frase:\n");
scanf("%c",&op);

for(i=1; i<=200; i++){

switch (str[i]){
case 1: count = count +1; break;
}
	}  
printf("%d",str);

Esse e o código que tenho mas isso deve tar ai uma grande calinada na programaçao...

Alguem pode dar uma ajuda..

Cumps

Batatoon :thumbsup:

Edited by batatoon13
Tags code + GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

ora bem, existem dois pontos errados nesse código:

- para ler uma string, usas a escaped sequence %s e não a %c

- o valor do caso no teu switch é o número 1 e não o caracter '1'

------

ps : terceiro, olha bem para o ultimo printf, que valor lhe estás a dar ?

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other sites
thoga31

Tens 2 hipóteses: fazer o switch de todos os dígitos, ou usar a função isdigit.

Melhora o título do tópico, sff.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
thoga31

Nao percebi o segundo ponto :S :confused:

Fizeste um switch em que o case é um número, 1, e não um caracter, '1' (entre plicas).


Knowledge is free!

Share this post


Link to post
Share on other sites
batatoon13

Fizeste um switch em que o case é um número, 1, e não um caracter, '1' (entre plicas).

Continuo-me a sentir muito burro, alem de nao conseguir mudar o nome do topico, ainda nao percebi essa cena do switch

Share this post


Link to post
Share on other sites
HappyHippyHippo

Nao percebi o segundo ponto :S :confused:

testa este código:

#include <stdio.h>

int main() {
 printf(" 1  >> inteiro = %d, caracter = %c\n",   1,   1);
 printf("'1' >> inteiro = %d, caracter = %c\n", '1', '1');

 return 0;
}


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

Share this post


Link to post
Share on other sites
thoga31

Continuo-me a sentir muito burro, alem de nao conseguir mudar o nome do topico, ainda nao percebi essa cena do switch

Antes de mais, o que pretendes com aquele switch? Porquê um "case 1"?

Quanto ao título, tens um botão no fundo do post chamado "editar", onde depois clicas num que diz "Usar editor completo", e aí podes alterar o título


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

Antes de mais, o que pretendes com aquele switch? Porquê um "case 1"?

isto :

switch {
 case /* caracter 1 */ :
 case /* caracter 2 */ :
 case /* caracter 3 */ :
 case /* caracter 4 */ :
 case /* caracter 5 */ :
 case /* caracter 6 */ :
 case /* caracter 7 */ :
 case /* caracter 8 */ :
 case /* caracter 9 */ :
 case /* caracter 0 */ :
   ndigitos++;
   break;
 default :
   break;
}

é a segunda ideia que uma pessoa que não conheça a libc tem

@batatoon13 : obviamente não coloquei os valores dos cases para ver se chegas lá por ti


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

Share this post


Link to post
Share on other sites
thoga31

Pois, eu só queria que fosse o @batatoon13 a dizer-me, mas assim o caminho já vai a meio e chegamos à mesma meta :D

@batatoon13, completa lá os cases do @Happy.


Knowledge is free!

Share this post


Link to post
Share on other sites
batatoon13

Bem o tópico ja esta.

Sim a ideia é isso verificar caractere a caractere, se é numero ou letra e sempre que for numero contar +1 para depois mostrar no resultado!

e nao consigo completar os cases :/

Share this post


Link to post
Share on other sites
thoga31

Para cada dígito! Sim, claro! Então como esperavas que fosse?


Knowledge is free!

Share this post


Link to post
Share on other sites
batatoon13

Ja tentei, mas acho que fiz alta burrice, fiz tipo

case 1 : count = count +1;
case 2 : count = count +1;
.....

raios parta 'c'

Para cada dígito! Sim, claro! Então como esperavas que fosse?

Sim era isso que queria mas tipo, se a frase tiver 150 dígitos nao faço 150 cases certo?!

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
thoga31

Que confusão...

Cada caracter de uma frase é analisada através do ciclo for, como estás a fazer. O que tens de fazer a cada iteração do ciclo é verificar o que é esse caracter. Neste caso, tens de verificar se é um dígito.

Portanto, como escreves um caracter em C?

char ch='a';

É entre plicas. E tu não estás a meter plicas!

Depois, Não precisas de repetir a instrução nos cases:

case 'a':
case 'b':
case 'c': printf("a, b ou c");
         break;

Se o caracter a analisar for 'a', ele vai "saltar" até encontrar um break, o que termina o switch.

Revê urgentemente os conceitos de número, caracter, string, e estrutura case.


Knowledge is free!

Share this post


Link to post
Share on other sites
batatoon13

Eu sei que %c ou %d devo usar conforme preciso, mas estou mesmo confuso com o codigo de qualquer forma. obrigado vou ter de ver isto na aula!

Share this post


Link to post
Share on other sites
thoga31

Conforme precisas? Como assim? %d é para inteiros, %c para caracteres e %s para strings.

Estás confuso porque não sabes bem utilizar estes ciclos e estruturas. Repara:

for(i=1; i<=200; i++){
  switch (str[i]) {
     case '1': 
     case '2':
     case '3': // etc etc
               ++count;
               break;
     default:
        break;
  }
}  

Isto faz-te algum sentido? E sabes porque usei plicas?


Knowledge is free!

Share this post


Link to post
Share on other sites
pwseo

Ah!, a famosa confusão entre números e a representação textual (neste caso decimal) dos mesmos! O ensino de programação anda bom, pelo que vejo. Nem sabem o que são os diversos tipos de dados e já fazem loops, condições e whatnot!

  • Vote 1

Share this post


Link to post
Share on other sites
Rui Carlos

Ja tentei, mas acho que fiz alta burrice, fiz tipo

case 1 : count = count +1;
case 2 : count = count +1;
.....

Se queres fazer assim, tens que colocar um break no final de cada case.

case 1 : count = count +1;
	 break;
case 2 : count = count +1;
	 break;
.....

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.