Pesquisar este blog

Livros Recomendados

sexta-feira, 10 de abril de 2020

URI - 1234 - Sentença Dançante - Strings - C++

Plataforma: URI
Problema1234

Enunciado:
Uma sentença é chamada de dançante se sua primeira letra for maiúscula e cada letra subsequente for o oposto da letra anterior. Espaços devem ser ignorados ao determinar o case (minúsculo/maiúsculo) de uma letra. Por exemplo, "A b Cd" é uma sentença dançante porque a primeira letra ('A') é maiúscula, a próxima letra ('b') é minúscula, a próxima letra ('C') é maiúscula, e a próxima letra ('d') é minúscula.

Linguagem: C++

Solução:
Ao fazer a leitura da linha, uma variável booleana é criada chamada upper. Esta variável fica com o valor true, quando a próxima letra a ser escrita é maiúscula. Em caso de false, ela é minúscula.
A linha é percorrida, verificando se na posição i possui uma letra. Caso possua, é verificado se a letra é minúscula e a variável upper manda escrever uma letra maiúscula. Neste caso, é invertido de minúsculo para maiúsculo fazendo line[i] = line[i] - 'a' + 'A'.
O mesmo é feito simetricamente quando upper é false.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

int main(){
 string line;
 while(getline (cin, line)){
  bool upper = true;
  for(int i=0; i<line.size(); i++){
   if((line[i]>='a' and line[i]<='z') or (line[i]>='A' and line[i]<='Z')){ 
    if(upper and line[i]>='a' and line[i]<='z'){
     line[i] = line[i] - 'a' + 'A';
    }
    if(!upper and line[i]>='A' and line[i]<='Z'){
     line[i] = line[i] - 'A' + 'a';
    }
    upper = !upper;
   }
  }
  cout << line << endl;
 }
    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