敏感字段加密
敏感字段加密
题目描述:
【敏感字段加密敏】给定一个由多个命令字组成的命令字符串:
1、字符串长度小于等于127字节,只包含大小写字母、数字、下划线和偶数个双引号;
2、命令字之间以一个或多个下划线_进行分割;
3、可以通过两个双引号来"标识包含下划线_的命令字或空命令字(仅包含两个引双引号的命令字)双引号不会在命令字内部出现;
仅对指定索引的敏感字段进行加密,替换为*,并删除命令字前后多余的下划线_。如果无法找到指定索引的命令字,输出字符串ERROR。
输入描述:
输入为两行,第一行为命令字索引K(从0开始),第二行为命令字符串S。
输出描述:
输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR
示例 1
输入:
1
pasword_a12345678__timeout_100
输出:
pasword_a12345678__timeout_100
pasword_*_timeout_100
参考代码
C++
#include<bits/stdc++.h> using namespace std; void splitsStr(vector<string> &str, string &inputs, string pattern); int main() { int index; cin >> index; while(getchar() != '\n') { char c = getchar(); break; } string inputs; getline(cin, inputs); vector<string> str; string pattern = "_"; splitsStr(str, inputs, pattern); int len = str.size(); if(index > len - 1) { cout << "ERROR" << endl; }else { string ans; for (int i = 0; i < str.size(); i++) { if(index == i) { ans += "*"; }else { ans += str[i]; } if(i != str.size() - 1) { ans += "_"; } } cout << ans << endl; } system("pause"); return 0; } void splitsStr(vector<string> &str, string &inputs, string pattern) { inputs += pattern; bool index = false; for (int i = 0; i < inputs.length();i++) { //如果当前字符是下划线,跳过当前字符 if (inputs[i] == '_') { continue; } //如果当前字符是双引号,则从双引号开始,到双引号结束。 if(inputs[i] == '"') { int pos = inputs.find('"',i + 1); string s = inputs.substr(i, pos - i + 1); str.push_back(s); i = pos; continue; } //如果当前字符不是双引号和下划线,则从当前字符开始,直至下划线结束 if (inputs[i] != '_' && inputs[i] != '"') { int pos = inputs.find(pattern,i); string s = inputs.substr(i, pos - i); i = pos; str.push_back(s); continue; } } }