在我的程序中,将要加密一个字符串(可能包含诸如“ä”,“ö”之类的变音符或诸如“ß”之类的其他奇异字符)。
第二个参数为argv[2]
,并存储在字符串文本中。
函数findInMap在包含26个键(代表列)和字符串向量值(代表行)的映射中向上查找传递的字符。
返回的是代表行和列的整数对的向量。
只要不使用任何外来字符,一切都会按预期进行。如果使用它们,则会发生浮点异常。
// Iterate over all characters in string.
for (int i = 0; i < text.size(); i++) {
vector<pair<int, int>> possibilites
= findInMap(cipherTable, text.substr(i, 1));
// Choose one possibility.
int choice = rand() % possibilites.size();
cipherString = cipherString + alphabet[possibilites[choice].first]
+ to_string(possibilites[choice].second + 1);
}
有趣的是,当我将上面的代码更改为
vector<pair<int, int>> possibilites
= findInMap(cipherTable, "ü");
忽略输入并仅查找“ü”,不会发生任何错误,但是此for循环执行了两次。字符串“ü”的大小似乎为2。
我怎么
非常感谢您的帮助。