C#自界說字符串調換WordStr辦法實例。本站提示廣大學習愛好者:(C#自界說字符串調換WordStr辦法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#自界說字符串調換WordStr辦法實例正文
本文實例講述了C#自界說字符串調換WordStr辦法。分享給年夜家供年夜家參考。詳細完成辦法以下:
1、成績:
前一陣碰到一個如題目的算法題,是將原有字符串的某些片斷調換成指定的新字符串片斷,例如將源字符串:abcdeabcdfbcdefg中的cde調換成12345,獲得成果字符串:ab12345abcdfb12345fg,即:abcdeabcdfbcdefg -> ab12345abcdfb12345fg。
2、完成辦法:
明顯不克不及用string.WordStr辦法,須要自界說一個辦法 string WordStr(string originalString, string strToBeWordStrd, string strToWordStr),上面是我的完成代碼,在半個小時內完成,經由過程了調試和慣例數據的測實驗證,還算是合格吧。
public static string WordStr(string originalString, string strToBeWordStrd, string strToWordStr)
{
string resultString = null;
char[] originalCharArray = originalString.ToCharArray();
char[] strToBeCharArray = strToBeWordStrd.ToCharArray();
char[] strToCharArray = strToWordStr.ToCharArray();
List<Char> newCharList = new List<Char>();
for (int i = 0; i < originalCharArray.Count(); i++)
{
if (originalCharArray[i] == strToBeCharArray[0])
{
bool IsWordStr = false;
for (int j = 0; j < strToBeCharArray.Count(); j++)
{
if (((i + j) < originalCharArray.Count())
&& (originalCharArray[i + j] == strToBeCharArray[j]))
{
IsWordStr = true;
}
else
{
IsWordStr = false;
break;
}
}
if (IsWordStr)
{
i += strToBeCharArray.Count() - 1;
for (int k = 0; k < strToCharArray.Count(); k++)
{
newCharList.Add(strToCharArray[k]);
}
}
else
{
newCharList.Add(originalCharArray[i]);
}
}
else
{
newCharList.Add(originalCharArray[i]);
}
}
resultString = string.Join("", newCharList);
return resultString;
}
由於有時光限制的請求,我沒有添加正文,不外代碼量不算多,邏輯也算簡略清楚,沒有正文也OK啦,缺陷是算法龐雜度比擬高。上面經由自己贊成,轉載一下同事Hello Kitty同窗對統一成績的完成代碼, 也換一種思緒來處理統一個成績。代碼稍多,也添加了一些附加功效,各類正文也很完整,固然也須要消費更多時光。迎接年夜家有興致一同評論辯論此話題! PS:就在適才還發明了上面代碼的一個bug,就當是隱蔽彩蛋了!
public class WordStr
{
/// <summary>
/// WordStr 辦法
/// </summary>
/// <param name="source">原字符串</param>
/// <param name="find">須要查找的字符串</param>
/// <param name="replace">調換的字符串</param>
/// <returns>終究調換勝利的字符串</returns>
public string WordStr(string source, string find, string replace)
{
// 要查找的字符串年夜於本來字符串,則不處置,前往本來字符
if (find.Length > source.Length)
{
return source;
}
// 記載找到若干次
int findCount = 0;
// 僅用於標志,幫助記載若干次
bool flag = true;
// n:source字符串遍歷的數值;j:find字符串遍歷的數值
int n = 0, j = 0;
// s:查找到字符串的開端索引,e:查找到字符串的停止索引
int s = 0, e = 0;
while (true)
{
// 斷定字符能否相等
if (source[n] == find[j])
{
// Source 序列+1
n++;
// 斷定能否為第一名相婚配
if (j == 0)
{
// 賦值給s,查找到頭的索引
s = n;
}
// 查找到後下一次比擬find的下一名
j++;
// 標志臨時找到後面雷同的字符
flag = true;
}
else
{
// 記載不完整婚配
flag = false;
// find的索引歸零
j = 0;
// Source的索引持續想加
n++;
}
// 曾經查找終了
if (j == find.Length)
{
// 完整婚配
if (flag)
{
// 查找的字符數目+1
findCount++;
}
// 記載查找的數組開頭索引
e = n;
// source 索引持續+1
n++;
// find的索引歸零
j = 0;
// 盤算生成新字符串,以後持續輪回,直到調換一切字符串
source = GetNewString(source, find, replace, s, e);
}
// Source遍歷終了,則加入輪回
if (n >= source.Length)
{
break;
}
}
// 終究字符串
return source;
}
/// <summary>
/// 取得新的字符串
/// </summary>
/// <param name="source">源字符串</param>
/// <param name="find">須要查找的字符</param>
/// <param name="replace">須要調換的字符</param>
/// <param name="startIndex">查找到的字符開端索引</param>
/// <param name="endIndex">查找到的字符停止索引</param>
/// <returns>前往調換後的字符串</returns>
public string GetNewString(string source, string find, string replace, int startIndex, int endIndex)
{
// 新字符串的長度
int newArrayLength = source.Length + endIndex - startIndex;
// 新字符數組
char[] newStringArray = new char[newArrayLength];
// 將前半部門復制給新字符串
for (int i = 0; i < startIndex - 1; i++)
{
newStringArray[i] = source[i];
}
// 以後暫時開端索引
int tempCurrentStartLength = startIndex - 1;
// 將須要調換的賦值給新的字符數組
for (int i = tempCurrentStartLength; i < tempCurrentStartLength + replace.Length; i++)
{
newStringArray[i] = replace[i - tempCurrentStartLength];
}
// 將以後殘剩的字符賦值給新的數組
for (int i = endIndex + 1; i < newArrayLength; i++)
{
newStringArray[i] = source[i - 1];
}
// 前往轉換後的字符串
return string.Concat(newStringArray);
}
}
願望本文所述對年夜家的C#法式設計有所贊助。