我想「增長」一個字符串到所需的長度(即「ABCDE」,所需的長度7,填充後變成「 - ABCDE」,「-A- BCDE「,」 - AB-CDE「,......,」ABCDE--「)。如何「成長」一個字符串到想要的長度
當我試圖使用以下代碼將「ABCDEFGH」填充到長度16時,代碼將永久運行。
/// <summary>
/// Pad a str to desired length
/// </summary>
/// <param name="s"></param>
/// <param name="length"></param>
/// <param name="pad"></param>
/// <param name="Padded"></param>
public static void PadToLength(string s, int length, char pad, ref List<string> Padded)
{
if (s.Length == length)
{
Padded.Add(s);
return;
}
else if (s.Length > length)
{
return;
}
else
{
List<int> pos = GetExceptPos(s, pad.ToString());
pos.Sort();
int count = -1;
foreach (int p in pos)
{
count++;
// Pad left
string leftPadStr = s.Substring(0, p) + pad + s.Substring(p);
PadToLength(leftPadStr, length, pad, ref Padded);
// Pad right at the last pos
if (count == pos.Count - 1)
{
string rightPadStr = s + pad;
PadToLength(rightPadStr, length, pad, ref Padded);
}
}
}
}
/// <summary>
/// Find indexes for elements different from target str
/// </summary>
/// <param name="str"></param>
/// <param name="excludeStr"></param>
/// <returns></returns>
private static List<int> GetExceptPos(string str, string excludeStr)
{
List<int> allIndexes = new List<int>();
for (int i = 0; i < str.Length; i++)
{
allIndexes.Add(i);
}
return allIndexes.Except(str.IndexesOf(excludeStr)).ToList();
}
任何建議將不勝感激。謝謝。
這是不完全填充的字符串 - 它看起來像要拿出的長度爲N的所有排列,使用連字符和有序的字符集? –
*代碼永遠運行* - 請使用逐步執行來找出哪部分代碼導致無限循環/遞歸。在這一點上觀察變量值也可以幫助您找到問題的實際原因。 –
@RJLohan是正確的。你想達到什麼目的?填充意味着在字符串的末尾添加一個「填充」字符,以使字符串等於一定的長度。你似乎在尋找所有可能的組合。 – Icemanind