Giải mã văn bản

Tủ sách mở Wikibooks

Để đảm bảo tính bảo mật trong công tác truyền tin, Cục thông tin quốc gia quy định phải mã hóa bản tin gốc trước khi gửi đi bằng cách thêm các ký tự # vào các vị trí trong bản tin. Chính vì vậy, cô văn thư của công ty XYZ nhận được văn bản của cấp trên đọc không hiểu gì. Tiếp sau cô nhận được một bản hướng dẫn giải mã như sau: trong một chuỗi khi tính từ trái sang phải, nếu gặp ký tự # thì đó là dấu hiệu của yêu cầu xóa đi một ký tự đứng ngay trước vào chính nó, nếu kí tự # đứng đầu thì chỉ xóa mỗi kí tự #.

Yêu cầu: Viết chương trình giúp cô văn thư giải mã văn bản nhận được.

Dữ liệu vào: Nhập từ bàn phím chuỗi đã mã hóa trên một dòng

Dữ liệu ra: Xuất ra màn hình chuỗi đã được giải mã

Nhập Xuất
Ch#o ch#ong mg#ae#i sj#ae#t con#g# #ngau#y nh#en kin#m Co cong mai sat co ngay nen kim

Lời giải

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;

    cout << "Nhap ma hoa: ";
    getline (cin, s);

    for (int i = 0 ; i <= s.length() ; i++)
        if (s[i] == '#') {
            if (s[i-1] == ' ' || i == 0) {
                s.erase(i, 1);
                i--;
            }
            else {
                s.erase(i-1, 2);
                i -= 2;
            }
        }

    cout << "Giai ma: " << s;

    return 0;
}