TOPIC

Wrong Answer (5%)

Fabrício Milanez asked 4 months ago

Todas as saídas após a primeira estão faltando o último char, não sei o que está causando este problema.

Código:

#include <iostream>
#include <cstring>
#include <string>

// 1ª passada: letras -  somar 3 ao valor ASCII
// 2ª passada: inverter
// 3ª passada: segunda metade -  subtrair 1 do valor ASCII
std::string criptografar(std::string msg)
{
    size_t len = msg.length();
    char *buffer = new char[len + 1];     // len + '\0'
    std::strcpy(buffer, msg.c_str());

    // 1ª passada
    for (int i = 0; i < len; i++)
        if (buffer[i] >= 'A' && buffer[i] <= 'Z' || buffer[i] >= 'a' && buffer[i] <= 'z')   // é letra
            buffer[i] += 3;

    // 2ª passada
    for (int i = 0, j = len - 1; i < len/2; i++, j--)
    {
        char temp = buffer[i];
        buffer[i] = buffer[j];
        buffer[j] = temp;
    }

    // 3ª passada
    for (int i = len/2; i < len; i++)
        buffer[i]--;

    msg = std::string(buffer);
    delete[] buffer;
    return msg;
}

int main()
{
    int n;
    std::string msg;

    std::cin >> n;

    for (int i = 0; i < n; i++)
    {
        std::cin.ignore(); // limpa o buffer
        std::getline(std::cin, msg);
        msg = criptografar(msg);
        std::cout << msg + '\n';
    }

    return 0;
}

This topic has not been answered yet. Be the first!

Remember not post solutions. Your post may be reviewed by our moderators.