Exercícios de C/C++ para iniciantes

Contar palavras em uma frase com C e C++

Nesta lição, você vai contar as palavras separadas por espaços em uma frase acompanhando o estado enquanto percorre a string.

Introdução

Um jeito confiável de contar palavras é acompanhar se o programa está dentro de uma palavra ou em um espaço. Toda vez que passamos de um espaço para um caractere que não é espaço, uma nova palavra começou. Esse método funciona até com vários espaços seguidos.

Pontos importantes

  • Ative os avisos do compilador (compiler warnings) e corrija todos eles.
  • Entenda o tipo de dado e o tempo de vida (lifetime) de cada valor.
  • Sempre valide os dados de entrada e os limites dos índices de arrays.

Exemplos de código C e C++

C
Executar →
main.c
#include <ctype.h>
#include <stdio.h>
int main(void) {
    const char *text = "C and C++ examples"; int words = 0, inside = 0;
    // Count transitions from whitespace into a word.
    for (; *text; ++text) { if (isspace((unsigned char)*text)) inside = 0; else if (!inside) { ++words; inside = 1; } }
    printf("words=%d\n", words);
}
Resultado da execução
words=4
C++
Executar →
main.cpp
#include <iostream>
#include <sstream>
#include <string>
int main() {
    std::istringstream input("C and C++ examples"); std::string word; int words = 0;
    // Formatted extraction skips whitespace and returns one word.
    while (input >> word) ++words;
    std::cout << "words=" << words << '\n';
}
Resultado da execução
words=4

Comparação entre C e C++

A variável inside indica se a posição atual está dentro de uma palavra. Ao encontrar um espaço (verificado com isspace), inside volta a 0. Ao encontrar outro caractere com inside igual a 0, o programa aumenta o contador words e faz inside = 1. A frase "C and C++ examples" tem 4 palavras.

C

C usa funções procedurais pequenas e deixa à vista como os dados ficam na memória.

C++

C++ continua permitindo trabalhar em baixo nível, mas acrescenta tipos da biblioteca e abstrações mais seguras.

Exercícios práticos

Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.

  • Teste entradas inválidas e valores nos limites.
  • Compile com as flags -Wall -Wextra -Wpedantic para ativar mais avisos.
  • Separe as declarações compartilhadas em um arquivo de cabeçalho e a implementação em outro arquivo.

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios