gpt4 book ai didi

c# - 递归获取字符串的形式

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:18 25 4
gpt4 key购买 nike

我有一个字符串ABC,我正在尝试使用递归获取它的所有形式。例如,我的目标是使输出看起来像这样:

A
B
C
AB
AC
BC

目前,我遇到了一个问题,我似乎无法弄清楚为什么会这样。当我单步执行代码并到达 return temp 时,它会返回到 Passwords(word.Substring(start + 1, end - 1), start + 1, end); 即使函数已经完成。当它这样做时,它会删除我的列表中包含的所有元素。

class Program
{
static void Main(string[] args)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\words.txt";
string text = "abc";
List<string> passwords = Passwords(text, 0, text.Length);

foreach (string password in passwords)
{
using (StreamWriter writer = new StreamWriter(path))
{
Console.WriteLine(password);
writer.WriteLine(password);
}
}
}

public static List<string> Passwords(string word, int start, int end)
{
List<string> temp = new List<string>();
if (start == end)
{
temp.Add(word);
}

else if (word.Length == 2)
{
char[] input = word.ToCharArray();
string letter1 = input[0].ToString();
string letter2 = input[1].ToString();
string s = letter2 + letter1;
temp.Add(s);
}

else
{
if (start < end)
{
Passwords(word.Substring(start + 1, end - 1), start + 1, end);
}
}

return temp;
}
}

谁能帮我指出我做错了什么的正确方向?

最佳答案

听起来您想要从源文本中删除字符的所有组合。你不想重新排列,只返回所有有序的子集。

如果是这样,这可能会做你想做的事:

public IEnumerable<string> GetAllInstrings(string text)
{
yield return text.Substring(0, 1);
if (text.Length > 1)
{
foreach (var element in GetAllInstrings(text.Substring(1)))
{
yield return element;
yield return text.Substring(0, 1) + element;
}
}
}

我从“ABC”得到以下结果。

A 
B
AB
C
AC
BC
ABC

关于c# - 递归获取字符串的形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com