Pesquisar este blog

Livros Recomendados

sexta-feira, 26 de março de 2021

URI (BEECROWD) - 1263 - Aliteração - Strings - C e C++ - Solução Alternativa 2

Plataforma: URI (BEECROWD)

Problema1263


Linguagem: C++

Enunciado:
Uma aliteração ocorre quando duas ou mais palavras consecutivas de um texto possuem a mesma letra inicial (ignorando maiúsculas e minúsculas). Sua tarefa é desenvolver um programa que identifique, a partir de uma sequência de palavras, o número de aliterações que essa sequência possui.

Solução em C e C++:

A função strtok observa a ocorrência de um token (neste caso, um espaço em branco) para dividir a cadeia de caracteres, e assim conseguir obter a primeira letra de cada palavra daquela linha. Esta primeira letra está disponível na variável l ou em w[0]. A segunda estrutura while é responsável por esta iteração. A variável anterior obtém sempre a primeira letra da palavra anterior e, se for igual à variável l, temos uma aliteração. A variável podeContar funciona como um controlador booleano, pois ela só permitirá a contagem se a aliteração ainda não estiver sido registrada. Por exemplo, se três palavras seguidas representarem aliterações, o contador não poderia incrementar pela segunda vez, pois a aliteração já foi registrada.

Código em C++:

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    
    char *w, anterior = ' ', l;
    string linha;
    
    while (getline(cin, linha)) {
        
        int n = 0;
        bool podeContar = true;
        w = strtok(&linha[0], " ");
        
        while (w != NULL) {
            
            l = w[0];
            
            if (l >= 'a' && l <= 'z')
                l -= 32;
                
            if (anterior != l)
                podeContar = true;
            else if (podeContar) {
                n++;
                podeContar = false;
            }
                
            anterior = l;
            w = strtok(NULL, " ");
        }
        
        cout << n << endl;
    }
    
    return 0;
}


Código em C:

#include <stdio.h>
#include <string.h>

int main() {
    
    char linha[5010], *w, anterior = ' ', l;
    int n, podeContar;
    
    while (scanf ("%[^\n]%*c", linha) != EOF) {
        
        n = 0;
        podeContar = 1;
        
        for (w = strtok(linha, " "); w != NULL; w = strtok(NULL, " ")) {
            
            l = w[0];
            
            if (l >= 'a' && l <= 'z')
                l -= 32;
                
            if (anterior != l)
                podeContar = 1;
            else if (podeContar) {
                n++;
                podeContar = 0;
            }
                
            anterior = l;
        }
        
        printf("%d\n", n);
    }
    
    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas