Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1249. Mostrar todas as postagens
Mostrando postagens com marcador 1249. Mostrar todas as postagens

quarta-feira, 19 de agosto de 2020

URI - 1249 - Rot13 - Strings - C++

Plataforma: URI
Problema1249

Enunciado:
Escreva um programa que receba uma mensagem "secreta" e retorne esta mensagem codificada. A mensagem é codificada com uma cifra chamada rot13. Rot13 funciona da seguinte maneira, é atribuido para cada letra um índice, baseado em sua posição no alfabeto. a = 1, b = 2, c = 3, ..., z = 26. Cada letra da mensagem deve ser deslocada 13 posições para a direita, se o fim do alfabeto for atingido, a contagem recomeça no primeiro caracter do alfabeto. Por exemplo, o caracter "a" (aspas apenas para evidenciar), seria mapeado para "n", "y" para "l", "f" para "s", e assim por diante. O mesmo processo é feito para letras maiúsculas também. Quaisquer caracteres não-alfabéticos devem ser repassados para a saída sem alterações.

Linguagem: C++

Solução:
Cada linha é percorrida procurando por letras. Quando a letra é encontrada, a função rot13 é chamada para trocar a letra para 13 letras posteriores. Caso a letra ultrapasse z, então é reiniciado a contagem em a.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
 
using namespace std;

bool minuscula(char aux){
 if(aux >= 'a' and aux <= 'z') return true;
 else return false;
}
bool maiuscula(char aux){
 if(aux >= 'A' and aux <= 'Z') return true;
 else return false;
}


char rot13(char aux){
 char final_char;
 if(minuscula(aux)){
  if(aux <= 'm'){
   final_char = aux + 13;
  } else{
   final_char = aux - 'z' + 'a' + 12;
  }
 }else{
  if(aux <= 'M'){
   final_char = aux + 13;
  } else{
   final_char = aux - 'Z' + 'A' + 12;
  }
 }
 return final_char;
}
 
int main() {
 string line;
 while(getline(cin, line)){
  string final_str = "";
  for(int i=0; i<line.length();i++){
   if(minuscula(line[i]) or maiuscula(line[i])){
    final_str += rot13(line[i]);
   }
   else{
    final_str += line[i];
   }
  }
  cout << final_str << endl;
 }
 
    return 0;
}

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