Skip to content

Password

题目链接:1035 Password (20 point(s))

题干大意

按照规则:1->@, 0->%, l->L, O->o修改密码

思路

设置标志,表示是否有修改,修改后的存储在另一个vector

AC代码

C++
#include <iostream>
#include <vector>
using namespace std;

struct User {
    string name;
    string passwd;
    User(string s1, string s2) : name(s1), passwd(s2) {}
};

bool scan(User& user)
{
    bool modified = false;
    for (auto& s : user.passwd) {
        switch (s) {
            case 'l':
                s        = 'L';
                modified = true;
                break;
            case '0':
                s        = '%';
                modified = true;
                break;
            case '1':
                s        = '@';
                modified = true;
                break;
            case 'O':
                s        = 'o';
                modified = true;
                break;
            default:
                break;
        }
    }
    return modified;
}

int main()
{
    int n;
    cin >> n;
    vector<User> users;
    while (n--) {
        string t_name, t_passwd;
        cin >> t_name >> t_passwd;
        users.emplace_back(t_name, t_passwd);
    }
    vector<User> ans;
    for (auto& user : users) {
        if (scan(user)) {
            ans.emplace_back(user);
        }
    }
    if (ans.size() == 0) {
        cout << "There " << (users.size() > 1 ? "are " : "is ") << users.size() << " account"
             << (users.size() > 1 ? "s " : " ") << "and no account is modified";
    } else {
        cout << ans.size() << endl;
        for (auto& u : ans) {
            cout << u.name << " " << u.passwd;
            if (&u != &ans.back())
                cout << endl;
        }
    }
    return 0;
}