Pesquisar este blog

Livros Recomendados

terça-feira, 23 de março de 2021

URI (BEECROWD) - 3038 - Carta de Natal Criptografada - Strings - C e C++ (com Solução Alternativa)

Fala, pessoal! Aqui foi resolvido o problema "Carta de Natal Criptografada", em C e C++. Dessa vez postei duas soluções diferentes de C++, ambas são aceitas pela plataforma. Vejam abaixo!

Plataforma: URI (BEECROWD)
Problema3038

Linguagens: C e C++


Solução:

Código em C:

Nesta solução o texto foi armazenado na variável frase, um array de char, e cada letra foi obtida procurando os caracteres especiais. Para cada caso, imprimia-se a vogal correspondente e, caso não houvesse um dos caracteres, imprimia o caractere original. Ao final é necessário quebrar a linha com \n.

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

int main() {
    
    char frase[260], letra;
    int i;
    while (fgets(frase, 260, stdin) != NULL) {
        for (i = 0; i < strlen(frase); i++) {
            letra = frase[i];
            if (letra == '@')
                printf("a");
            else if (letra == '&')
                printf("e");
            else if (letra == '!')
                printf("i");
            else if (letra == '*')
                printf("o");
            else if (letra == '#')
                printf("u");
            else
                printf("%c", letra);
        }
    }
    printf("\n");

    return 0;
}

Código em C++:

Nessa solução as linhas são percorridas procurando por ocorrências de @, &, !, * ou #, subsituindo eles pela respectiva letra.

 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
#include <iostream>
 
using namespace std;
 
int main() {
 
 std::string line;
 while (std::getline(std::cin, line))
 {
  for(int i=0;i<line.length();i++){
   switch(line[i]){
    case '@':line[i]='a'; break;
    case '&':line[i]='e'; break;
    case '!':line[i]='i'; break;
    case '*':line[i]='o'; break;
    case '#':line[i]='u'; break;
    default: break;
   }
  }
     std::cout << line << std::endl;
 }

 
    return 0;
}

Código em C++:

Essa solução é um pouco diferente. A string tem seu tamanho obtido com o método size(), e não com o método length(). Em vez de utilizar switch, foi utilizada a estrutura if. Além disso, no switch uma string line estava recebendo os respectivos caracteres. Nesta solução o caractere é impresso, sem a necessidade de armazená-lo.

#include <iostream>

using namespace std;

int main() {
    
    string frase;
    char letra;
    while (getline(cin, frase)) {
        for (int i = 0; i < frase.size(); i++) {
            letra = frase[i];
            if (letra == '@')
                cout << 'a';
            else if (letra == '&')
                cout << 'e';
            else if (letra == '!')
                cout << 'i';
            else if (letra == '*')
                cout << 'o';
            else if (letra == '#')
                cout << 'u';
            else
                cout << letra;
        }
        cout << 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