fbpx

Problema #964 – cod – Rezolvari PBInfo

0

Pentru codificarea textului unui mesaj s-a folosit codificarea ASCII, asociindu-se literelor mari ale alfabetului englez numerele distincte de la 65 la 90, literelor mici ale alfabetului englez numerele distincte de la 97 la 122, spaţiului numărul 32, iar punctului (.) numărul 46.

Fiecare linie a mesajului ce urmează a fi codificat, are cel mult 80 de caractere, textul lui fiind format din cuvinte separate printr-un singur spaţiu sau printr-un singur punct, iar cuvintele sunt formate numai din litere ale alfabetului

Codificarea textului mesajului este realizată astfel: fiecare cuvânt din text se scrie în ordine inversă, înlocuindu-se fiecare caracter cu şirul rezultat prin scrierea în ordine inversă a codului asociat acestuia. De exemplu codificarea caracterului z este şirul 221. Aceeaşi regulă de codificare se aplică atât spaţiului cât şi punctului.

Textul rezultat în urma codificării va conţine doar cifre, fără spaţii şi fără simboluri de punctuaţie.

Cerința

să se scrie un program care să citească codificarea textului unui mesaj, să decodifice textul şi să afișeze rezultatul decodificării.

Date de intrare

Fișierul de intrare cod.in conține conţine mai multe linii pe care sunt scrise doar cifre.

Date de ieșire

Fișierul de ieșire cod.out va conține un număr de linii egal cu numărul de linii din fişierul de intrare, fiecare linie conţinând decodificarea liniei corespunzătoare din fişierul de intrare.

Restricții și precizări

  • fișierul de intrare va conține maximum 18, fiecare linie conținând maximum 18 cifre

Exemplu

cod.in

79001795012119015018019723101001237999501611799014111112010113764
9989796410100164
4111116119910138

cod.out

Olimpiada de Informatica.
abc.de.
Sector
#include <bits/stdc++.h>

using namespace std;

ifstream cin("cod.in");
ofstream cout("cod.out");

char s[1001];

bool valid(int n)
{
    if(n == '.')
        return 1;
    if(n == ' ')
        return 1;
    if((n >= 'A' && n <= 'Z') || (n >= 'a' && n <= 'z'))
        return 1;
    return 0;
}

int ogl(int n)
{
    int ogl=0;
    while(n)
        ogl=ogl*10+n%10 , n/=10;
    return ogl;
}

int main()
{
    while(cin>>s)
    {
        int i = 0;
        int cnt = 0;
        int nr = 0 , p = 1;
        char v[200]="" ;
        int n = 0;
        while(s[i]!='\0')
        {
            nr+=(s[i]-48) * p;
            p*=10;
            cnt++;
            if(cnt%2==0)
                if(!valid(nr))
                    i++ , nr+=(s[i]-48) * p;
            if(cnt%2==0)
            {
                v[++n]=nr;
                nr=0;
                p=1;
            }
            i++;
        }
        for(int i = 1 ; i <= n+1 ; ++i)
        {
            if(v[i]=='.' || v[i]==' ' || v[i]=='\0')
            {
                int j = i-1;
                while(v[j]!='.' && v[j]!=' ' && j > 0)
                {
                    cout << (char)v[j];
                    j--;
                }
                if(v[i]!='\0')
                cout << (char)v[i];
            }
        }
        cout << endl;
    }
    return 0;
}
Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More