Plataforma: URI (BEECROWD)
Problema: 1263
Linguagem: C++
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