我正在寻找有关如何查找其字符可能具有多个变体的字符串的所有可能版本的一些提示。
一个简单的例子:“Macao”是起始字符串。字符“a”具有变体“ä”,字符“o”具有变体“ö”。
目标是从上述信息中获得以下列表:
Macao
Mäcao
Macäo
Mäcäo
Macaö
Mäcaö
Macäö
Mäcäö
到目前为止,我的方法是识别和提取带有变体的字符以简化事情。我们的想法是处理各个字符而不是整个单词。
aao
äao
aäo
ääo
aaö
äaö
aäö
ääö
以下代码查找我们正在使用的变体。
std::vector<std::string> variants;
variants.push_back("aä");
variants.push_back("oö");
std::string word = "Macao";
std::vector<std::string> results;
for (auto &variant : variants) {
for (auto &character : word) {
if (variant.front() == character) {
results.push_back(variant);
}
}
}
std::cout << "The following characters have variants: ";
for (auto &i : results) {
std::cout << i.front();
}
std::cout << std::endl;
下一步是找到各个字符的所有可能组合。为此,我编写了以下函数。它从results
.
std::string read_results(std::vector<std::string> &results)
{
std::string s;
for (auto &c : results) {
s.push_back(c.front());
}
return s;
}
这个想法是然后更改存储在其中的字符串results
以获得所有可能的组合,这就是我被卡住的地方。我注意到这std::rotate
似乎会有所帮助。