C++ 字符串加密解密算法判断 - 编码挑战

小码哥最近中奖了,为了保护奖金,他打算给保险箱设置一个新的密码。他想到两种加密方式:

  1. 字符交换: 将字符串中特定字符进行互换,例如将 'A' 和 'B' 互换。
  2. 字符顺序打乱: 将字符串中的字符顺序随机打乱。

现在,给你一个加密后的字符串和加密前的字符串,请你判断加密前的字符串是否能通过以上两种方式得到加密后的字符串。

输入格式:

第一行:加密后的字符串 第二行:加密前的字符串

有多组数据输入。

输出格式:

输出 "YES" 或 "NO",表示加密前的字符串能否得到加密后的字符串。

样例1:

输入:

JWPUDJSTVP VICTORIOUS
MAMA ROME
HAHA HEHE
AAA AAA
NEERCISTHEBEST SECRETMESSAGES

输出:

YES NO YES YES NO

备注: 所有字符串长度不超过 100

C++ 代码实现:

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

int main() {
    string a, b;
    while (cin >> a >> b) {
        // 方法一: 字符交换
        string temp = a;
        for (int i = 0; i < a.size(); i++) {
            for (int j = 'A'; j <= 'Z'; j++) {
                if (a[i] == j) temp[i] = b[j - 'A'];
            }
        }
        if (temp == b) cout << "YES ";
        else cout << "NO ";

        // 方法二: 字符顺序打乱
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        if (a == b) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

代码解释:

  1. 方法一: 遍历加密后的字符串,逐个字符比较,如果字符相同则将对应位置的字符替换为加密前的字符串中的字符。最后比较替换后的字符串与加密前的字符串是否一致。
  2. 方法二: 对加密后的字符串和加密前的字符串分别进行排序,比较排序后的字符串是否一致。

总结: 这段代码展示了两种常见的字符串加密方式,以及如何判断加密前的字符串是否能得到加密后的字符串。 这段代码可以帮助你学习字符串处理和算法分析。

C++ 字符串加密解密算法判断 - 编码挑战

原文地址: https://www.cveoy.top/t/topic/nJwP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录