Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

batatoon13

[Resolvido] Contagem de números na frase

Mensagens Recomendadas

batatoon13    0
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:

Editado por batatoon13
Tags code + GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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 ?

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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.

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
batatoon13    0
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
batatoon13    0
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 :/

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
batatoon13    0
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?!

Editado por thoga31
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
batatoon13    0
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pwseo    223
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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    312
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;
.....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Zzz    0
Zzz

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

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

raios parta 'c'

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

Claro que não vais fazer 150 dígitos, tu estas a ler posição a posição, logo só existe 10 números possíveis(0,1,2....9), fazes esses cases e depois é só somar mais um como estavas a fazer.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.