C# 如何获得所有字符串“可能性”
给定一个类似字符串s=abcdef的字符串, 获取包含以下所有字符串的列表/数组的最佳方法是什么:C# 如何获得所有字符串“可能性”,c#,arrays,.net,regex,string,C#,Arrays,.net,Regex,String,给定一个类似字符串s=abcdef的字符串, 获取包含以下所有字符串的列表/数组的最佳方法是什么: "acd", "abcd", "acdef", "abcdef" 其他信息: 结果的顺序无关紧要。 括号的数量未知 我曾尝试用正则表达式来实现这一点,但没有走多远。有很多方法可以实现这一点,但是下面是一个使用掩码数组跟踪置换状态、一些正则表达式和一些辅助方法的示例 给定 输出 Michael Randall的回答是正
"acd",
"abcd",
"acdef",
"abcdef"
其他信息:
结果的顺序无关紧要。
括号的数量未知
我曾尝试用正则表达式来实现这一点,但没有走多远。有很多方法可以实现这一点,但是下面是一个使用掩码数组跟踪置换状态、一些正则表达式和一些辅助方法的示例 给定 输出
Michael Randall的回答是正确的,但经过进一步思考,我终于能够想出一个可能不是很好的工作解决方案
string s = "a(b)cd(ef)";
List<string> result = new List<string>();
int amount = s.Split('(').Length;
amount = (int)Math.Pow(2, amount - 1);
for (int i = 0; i < amount; i++)
{
string temp = string.Copy(s);
string binaryString = Convert.ToString(i, 2).PadLeft(amount, '0');
string tempResult = "";
for (int j = 0; j < binaryString.Length && !temp.Equals(""); j++)
{
Regex regex = new Regex(@"[^(]*");
tempResult += regex.Match(temp).Value;
if (binaryString[binaryString.Length - 1 - j].Equals('1'))
{
string regexStr = @"\(([^)]*)\)";
regex = new Regex(regexStr);
tempResult += regex.Match(temp).Value;
}
if (temp.Contains(')'))
temp = temp.Substring(temp.IndexOf(')') + 1);
else temp = "";
}
result.Add(tempResult.Replace("(", "").Replace(")", ""));
}
这实际上是一个相当简单和有趣的问题。然而,您的问题很可能被错误地关闭,因为它没有显示任何代码或您被卡住的地方。你尝试过什么吗?有些事情可能会帮助你开始,虽然答案可能不考虑可选的部分。这能回答你的问题吗?我同意反对票,可能已经有重复票了。但投票以过于宽泛的方式收市肯定是错误的@MichaelRandall,是的,但由于有人尝试过,但没有表现出来,这是有可能发生的。也许你是对的
string s = "a(b)cd(ef)";
foreach (var result in Results(s))
Console.WriteLine(result);
acd
abcd
acdef
abcdef
string s = "a(b)cd(ef)";
List<string> result = new List<string>();
int amount = s.Split('(').Length;
amount = (int)Math.Pow(2, amount - 1);
for (int i = 0; i < amount; i++)
{
string temp = string.Copy(s);
string binaryString = Convert.ToString(i, 2).PadLeft(amount, '0');
string tempResult = "";
for (int j = 0; j < binaryString.Length && !temp.Equals(""); j++)
{
Regex regex = new Regex(@"[^(]*");
tempResult += regex.Match(temp).Value;
if (binaryString[binaryString.Length - 1 - j].Equals('1'))
{
string regexStr = @"\(([^)]*)\)";
regex = new Regex(regexStr);
tempResult += regex.Match(temp).Value;
}
if (temp.Contains(')'))
temp = temp.Substring(temp.IndexOf(')') + 1);
else temp = "";
}
result.Add(tempResult.Replace("(", "").Replace(")", ""));
}