Ir ao conteúdo

Posts recomendados

Postado

Escreva um programa em C para contar o número total de letras e números em uma string(máximo de 100 caracteres);

Entrada
Loremipsumdolorsitamet123--

Letras: 22
Números: 3

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void){
    int i,cont;
    char nome[100];
    scanf("%s",&nome);
    for(i=0;i<nome[i];i++){
        printf("Letras: %d",strlen(nome));
    }
    for(i=0;i<nome;i++){
        cont++;
        printf("Numeros: %d",cont);
    }
}
 

 

  • Obrigado 1
  • Membro VIP
Postado

Que tal algo como.. depois de capturar a string, claro

i=numero=letra=0
while (nome[i++]) //termina com zero
{
//incrementa numero se for número
//incremente letra se for letra
}

 

  • Obrigado 1
Postado

@Bloonsky Para a entrada de strings não precisa do operador &. E apenas um loop é necessário para resolver. Declare duas variáveis inteiras para armazenar os valores que serão mostrados com as quantidades dos números e das letras. Sinais e pontuações são desconsiderados, veja que o enunciado não conta o sinal de menos.

 

Uma forma de pegar apenas as letras no caso das minúsculas pode ser assim,

if(nome[i] >= 'a' && nome[i] <= 'z')

 

Outra seria com uma função nativa.

  • Curtir 1
  • Obrigado 1
Postado
14 horas atrás, Bloonsky disse:
...
    char nome[100];
...
 

image.png.b322e0b986541b1c027bf852a8fedcb7.png

Se o tamanho máximo de uma string chegar igual a 100, sua capacidade é igual a 101, isso porque nas funções que operam essa estrutura ela termina logicamente no caractere nulo (0 ou '\0'). A primeira vista esse detalhe aparenta pouco|nenhuma importância, mas produz resultados imprevisíveis.

  • Curtir 1
  • Obrigado 1
Postado

@Midori

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
    int i,cont=0, volume;
    char nome[100];
    scanf("%s", nome);
    for(i = 0; i<nome[i];i++){
        if(nome[i] >= 'a' && nome[i] <= 'z'){
        volume=strlen(nome);
        printf("Letras: %d",volume);
        break;
        }
    }
           for(i = 0; i <= nome[i]; i++){
            if(nome[i]>=0 && nome[i]<=9)
            cont++;
            printf("\nNumeros: %d",cont);
            break;
        }
    return 0;
}

tem como voce escrever este código para mim?Estou muito confuso em vetores!

  • Obrigado 1
Postado

@Bloonsky       seu código  está bem confuso , várias coisas desnecessárias ,  como usar dois loop's para fazer as comparações , usar strlen , que só serve para identificar o tamanho da string ,  e não faz nenhuma contaGem de letras , e na contageM de Números , precisa de aspas simples , pois são tratados como caracteres , sendo que estão dentro de uma string ,  e você usou o scanf  para pegar o que for digitado no teclado ,  e  mais esse scanf do modo simples como você usou , tem limitações , ali ele só vai pegar os caracteres digitados e até encontrar um espaço em branco , e vai parar por ali mesmo e colocar um finalizador de string , que é esse aqui "\0" , e o restante que foi digitado será descartado ,  então tem outros modos de usar o scanf para Que ele pegue todos os caracteres digitados ,   mas creio mesmo que seria  melhor usar a função "fgets" , que pega todos os caracteres digitados , e seu código modificado poderia ser assim  :

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
  int i,cont  = 0, volume;                   /// variaveis Locais
  int letras  = 0;                           /// e inicializadas
  int numeros = 0;
  char nome[100] = {"Loremipsumdolorsit amet123--"};
  printf("uma frase Qualquer -> ");
  /// scanf("%s", &nome);                        O scanf só pega os dados ate encontra um espaco em branco
  fgets( nome , sizeof( nome ) , stdin);     /// fgets pega todos os caracteres digitados e mais o newLine q eh a tecla Enter
  nome[strlen(nome) - 1] = 0;                /// remover aquele newLine , no caso , indesejado
                                             /// o laco for diz assim : para i comecando de zero
                                             /// pois Ao escrever essa string irah pilar uma Linha da para Baixo
  for(i = 0; nome[i]; i++)                   /// e enquanto o conteudo da variavel nome na posicao
  {                                          /// apontada pelo valor de i for diferente de Zero
                                             /// incrementa a variavel  i , senao fim do laco
    printf("val de Nome[%3d]= %3d %c\n"   ,  /// apenas verificar a SaiDa e os Num org em colunas
           i , nome[i] , nome[i]         );
    if( nome[i] >= 'a' && nome[i] <= 'z' ||  /// comparar com as Letras Minusculas
        nome[i] >= 'A' && nome[i] <= 'Z'  )  /// comparar com as Letras Maiusculas
    {
      letras++;                              /// incrementa a qtd de letras em mais uma unidade
                                             /// se quisesse duas unidades seria : letras += 2;
                                             /// O Que prEcisa eh contar a qtd de letras
                                             /// essas tres linhas aqui de baixo não servem para Nada,
      /// volume = strlen( nome );               para Que pegar o tamanho da string  ?
      /// printf( "Letras: %d\n",volume );       escrever o tamanho da string ? ? ?
      /// break;                                 isso aqui vai finalizar o loop e parar a contagem na primeira letras encontrada
    }
    if(nome[i] >= '0' && nome[i] <= '9')     /// comparar com Os Numeros  (Digitos De 0 ate 9)
    {
      numeros += 1;                          /// incrementa a qtd de Numeros em mais uma Unidade
    }
  }
/*
  for(i = 0; i <= nome[i]; i++)
  {
    if(nome[i]>=0 && nome[i]<=9)                 não precisa de mais esse loop , resolve se no primeiro mesmo
      cont++;
      printf("\nNumeros: %d",cont);
      break;
  }
*/
  printf("\rA Qtd de Letras nessa String eh ---: %d\n\
          \rA Qtd De Numeros  na  String eh ---: %d\n\n\n",
           letras , numeros);                  /// apenas uma chamada a Funcao printf torna o odiGo mais rápido
  return 0;
}

 

  • Curtir 1
Postado
11 horas atrás, Bloonsky disse:

Estou muito confuso em vetores!

 

Vetor é só um conjunto de mesmo tipo de dado que são posicionados em áreas contíguas de memória, p.ex,

char nome[100];

 

Essa declaração vai reservar na memória 100 posições do tipo char, assim poderá atribuir e pegar valores dessas posições pelo índice deles,

nome[0] = 'a';
nome[10] = 'b';

char A = nome[0];
char B = nome[10];

 

Nas duas primeiras vai atribuir as letras nas posições 0 e 10 do vetor e nas outras vai pegar esses valores e atribuir a outras variáveis. Na declaração com 100 elementos você pode acessar as posições de 0 a 99.

 

E quando o seu código faz esta comparação, só está lendo os valores da posição i.

if(nome[i] >= 'a' && nome[i] <= 'z')

 

O tipo char guarda um valor inteiro de acordo com a tabela ASCII e se consultar a tabela verá que o valor decimal da letra 'a' é 97 e da letra 'z' é 122. Com a condicional poderá contar a quantidade de letras minúsculas já que fará o teste se o caractere está entre 'a' e 'z' ou 97 e 122.

  • Obrigado 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...