如何修改C++代码排除大写字母A-Z,调整字符序列生成顺序
修改方案:移除大写字母A-Z,生成0→9→a→z的序列
嘿,这个修改其实非常直观——核心就是控制生成序列的字符集,把A-Z的部分彻底删掉,你的序列生成逻辑完全依赖这个字符集,改完之后自然就不会出现大写字母了。下面分两种常见情况给你具体的修改方式:
1. 手动循环初始化字符集的情况
如果你的代码里是像这样手动往Chars向量里加字符:
vector<char> Chars; // 原来的代码:添加0-9 for (char c = '0'; c <= '9'; ++c) Chars.push_back(c); // 原来的代码:添加A-Z(这一段就是要删掉的部分!) for (char c = 'A'; c <= 'Z'; ++c) Chars.push_back(c); // 原来的代码:添加a-z for (char c = 'a'; c <= 'z'; ++c) Chars.push_back(c);
直接把添加A-Z的那个for循环删掉就好,修改后变成:
vector<char> Chars; // 保留0-9 for (char c = '0'; c <= '9'; ++c) Chars.push_back(c); // 保留a-z for (char c = 'a'; c <= 'z'; ++c) Chars.push_back(c);
2. 用字符串初始化字符集的情况
如果你的代码是通过字符串转成向量的方式初始化Chars,比如:
string charStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; vector<char> Chars(charStr.begin(), charStr.end());
那只需要把字符串里的大写字母段ABCDEFGHIJKLMNOPQRSTUVWXYZ删掉,修改成:
string charStr = "0123456789abcdefghijklmnopqrstuvwxyz"; vector<char> Chars(charStr.begin(), charStr.end());
额外说明:不需要改动生成逻辑
你不用担心字符集大小变化会影响后续的多字符序列生成——你的Crack函数里已经用n = Chars.size()动态获取了字符集的长度(修改后是10+26=36),后面的循环计算(比如N *=n)会自动适配新的字符集,完全不用改其他逻辑,直接运行就能得到0→9→a→z,再到00→zz的序列啦。
内容的提问来源于stack exchange,提问作者gastin
相关产品推荐
相关产品推荐

