Você está aqui: C ::: Dicas & Truques ::: Strings e Caracteres

Como contar as ocorrências de um determinado caractere em uma string usando a linguagem C

Quantidade de visualizações: 11271 vezes
Em algumas situações precisamos obter a quantidade de vezes que um caractere ocorre dentro de uma string. Para isso podemos usar a função personalizada char_count(). Esta função recebe a string e o caractere que desejamos pesquisar e retorna um inteiro contendo a quantidade de vezes que o caractere foi encontrado.
Veja o código (usando apenas ANSI-C):

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// função personalizada que permite contar as
// ocorrências de um caractere em uma string
int char_count(const char *str, char caractere){
  int i, quant = 0;
 
  // vamos percorrer todos os caracteres da string
  for(i = 0; str[i]; i++){
    if(str[i] == caractere){ // localizamos
      quant++;
    }
  }
 
  return quant;
}
 
int main(int argc, char *argv[]){
  char frase[] = "Gosto muito de Java, JavaScript e Python";
 
  printf("Ocorrencias encontradas: %d",
    char_count(frase, 'a'));
 
  puts("\n\n");
  system("PAUSE");
  return 0;
}

Ao executarmos este código nós teremos o seguinte resultado:

Ocorrencias encontradas: 4

Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Tenha cuidado com os limites dos índices de um vetor ou matriz na linguagem C

Quantidade de visualizações: 9735 vezes
Um erro muito comum em programas C ocorre quando não atentamos para os limites dos índices de um vetor ou matriz. Como sabemos, os índices iniciam em 0 e vão até o tamanho do vetor menos 1. Porém, ao contrário de outras linguagens, o C (compiladores sendo usados em 2007 e 2008) não evita que este limite seja ultrapassado. O resultado disso é que o programa acaba lendo posições de memória inexistentes ou pertecentes a outros programas.

Veja um trecho de código no qual acessamos uma posição inválida no vetor valores. Este código foi testado no MinGW 3.4.2 e compilou e executou sem qualquer mensagem de advertência.

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  // array com 5 inteiros
  int valores[] = {23, 6, 45, 9, 3};
 
  // acessa um índice além dos limites do array
  // lembre-se de que os índices iniciam em 0
  int valor = valores[5];
 
  // exibe o resultado
  printf("%d\n\n", valor);
 
  system("PAUSE");
  return 0;
}

Ao executar este código nós teremos o seguinte resultado (o seu vai ser diferente, é claro):

-858993460

Minha recomendação é: se você quer mesmo programar na linguagem C, crie uma forma de impedir o acesso à índices inválidos. Se isso acontecer, os resultados exibidos pelos seus programas poderão ser realmente inesperados.


C ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de Dados em C - Como inserir antes de um determinado nó em uma lista encadeada simples usando C

Quantidade de visualizações: 1886 vezes
Em algumas situações nós precisamos inserir o novo nó antes de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores:

45 | 3 | 98 | 47

Suponha que queremos inserir o valor 50 antes do 98, então o novo conteúdo da lista será:

45 | 3 | 50 | 98 | 47

Observe que neste exemplo eu tratei o caso de inserir antes do primeiro nó, ou seja, antes do 45, mas não tratei a lista vazia. Há também a questão do laço infinito caso o usuário queira inserir antes de um nó não existente (não tratada). Veja o código completo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
 
// estrutura Nó
struct No{
  int valor;
  struct No *proximo;
};
// fim da estrutura Nó
 
// função que permite exibir os valores de
// todos os nós da lista
void exibir(struct No *n){
  if(n != NULL){
    do{
      printf("%d\n", n->valor);
      n = n->proximo;
    }while(n != NULL);
  }
  else
    printf("A lista esta vazia\n\n");
}
 
// função que permite inserir um novo nó
// antes de um determinado valor
struct No *inserir_antes_valor(struct No *n, int v, int v_antes){
  // reserva memória para o novo nó
  struct No *novo = (struct No*)malloc(sizeof(struct No));
  novo->valor = v;

  // guarda o nó antes do valor que procuramos
  struct No *anterior = NULL; 
  struct No *temp = n; // aponta para o início da lista
  // enquanto for diferente do valor que estamos procurando
  while(temp->valor != v_antes){
    anterior = temp; // anterior recebe temp
    // e temp recebe o seu próximo
    temp = temp->proximo;
  }
  
  // ATENÇÃO: não estamos tratando a condição
  // de lista vazia. Para isso veja minha dica
  // sobre como inserior no início da lista
  
  // devemos inserior no início da lista?
  if(anterior == NULL){
    // o próximo do novo nó é o início da lista
    novo->proximo = n;
    n = novo; // início da lista é o novo nó
  }
  else{
    // o proximo do anterior é o novo nó
    anterior->proximo = novo;
    // e o próximo do novo nó é temp
    novo->proximo = temp;
  }
  
  return n;
}

// função que permite inserir nós no
// final da lista.
// veja que a função recebe o valor a ser
// armazenado em cada nó e um ponteiro para o
// início da lista. A função retorna um
// ponteiro para o início da lista
struct No *inserir_final(struct No *n, int v){
  // reserva memória para o novo nó
  struct No *novo = (struct No*)malloc(sizeof(struct No));
  novo->valor = v;
 
  // verifica se a lista está vazia
  if(n == NULL){
    // é o primeiro nó...não deve apontar para
    // lugar nenhum
    novo->proximo = NULL;
    return novo; // vamos retornar o novo nó como sendo o início da lista
  }
  else{ // não está vazia....vamos inserir o nó no final
    // o primeiro passo é chegarmos ao final da lista
    struct No *temp = n; // vamos obter uma referência ao primeiro nó
    // vamos varrer a lista até chegarmos ao último nó
    while(temp->proximo != NULL){
      temp = temp->proximo;
    }
    // na saída do laço temp aponta para o último nó da lista
   
    // novo será o último nó da lista...o campo próximo dele deve
    // apontar para NULL
    novo->proximo = NULL;
    // vamos fazer o último nó apontar para o nó recém-criado
    temp->proximo = novo;
    return n; // vamos retornar o início da lista intacto
  }
}
 
int main(int argc, char *argv[])
{
  // declara a lista
  struct No *inicio = NULL;
 
  // vamos inserir quatro valores no final
  // da lista
  inicio = inserir_final(inicio, 45);
  inicio = inserir_final(inicio, 3);
  inicio = inserir_final(inicio, 98);
  inicio = inserir_final(inicio, 47);
 
  // vamos exibir a lista
  puts("Valores atuais:\n");
  exibir(inicio);
  
  // vamos inserir o valor 50 antes do 98
  inicio = inserir_antes_valor(inicio, 50, 98);
  
  // vamos exibir a lista novamente
  puts("\nValores agora:\n");
  exibir(inicio);
  
  puts("\n\n");
  system("pause");
  return 0;
}



C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico

Exercícios Resolvidos de C - Lendo a idade de um nadador e classificando sua categoria como infantil, juvenil, adolescente, adulto ou sênior

Quantidade de visualizações: 271 vezes
Pergunta/Tarefa:

Escreva um programa C que solicita a idade de um nadador e classifica sua categoria de acordo com as seguintes regras:

a) De 5 a 7 anos - Infantil;
b) De 8 a 10 anos - Juvenil;
c) De 11 a 15 anos - Adolescente;
d) De 16 a 30 anos - Adulto;
e) Acima de 30 anos - Sênior.

Sua saída deverá ser parecida com:

Informe sua idade: 19
Sua categoria é Adulto
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  // variáveis usadas na resolução do problema
  int idade;
    
  // vamos solicitar a idade do nadador
  printf("Informe sua idade: ");
  scanf("%d", &idade);
     
  // vamos verificar a categoria do nadador
  if((idade >= 5) && (idade <= 7)) {
    printf("Sua categoria é Infantil");  
  }
  else if((idade >= 8) && (idade <= 10)) {  
    printf("Sua categoria é Juvenil");  
  }
  else if((idade >= 11) && (idade <= 15)) {
    printf("Sua categoria é Adolescente");  
  }
  else if((idade >= 16) && (idade <= 30)) {
    printf("Sua categoria é Adulto");  
  }
  else if(idade > 30) {
    printf("Sua categoria é Sênior");  
  }
  else {
    printf("Não pertence a nenhuma categoria.");  
  }
   
  printf("\n\n");
  system("PAUSE");
  return 0;
}



Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 59 usuários muito felizes estudando em nosso site.