程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#自界說字符串調換WordStr辦法實例

C#自界說字符串調換WordStr辦法實例

編輯:C#入門知識

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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved