Given three strings: input, oldValue and newValue. Look for oldValue in input and replace it with newValue.
Signature:
Replace(string input, string oldValue, string newValue);
For example:
Replace("hello, world", "world", "galaxy") should return "hello, galaxy".
You cannot use built-in string replacement methods such as string.Replace, StringBuilder.Replace, Regex.Replace, etc.
You cannot use built-in string search method such as SubString, IndexOf. It is recommended to implement your own SubString, IndexOf methods.
C# string is an immutable object. You might want to use char array or StringBuilder to do string manipulations. However, if you use StringBuilder, you can not use StringBuilder‘s built-in methods to do string replacements and searching (Replace, SubString, IndexOf, Append, Insert, Delete, etc. are not allowed).
using System; using System.Collections.Generic; using System.Text; namespace StringReplacement { static class Program { static void Main() { string s = Replace("Today arare arein what aarae Monday!", "are", "is"); Console.WriteLine(s); } /// <summary> /// Given three strings: input, oldValue and newValue. Look for oldValue in input and replace it with newValue. /// </summary> /// <param name="input">input string</param> /// <param name="oldValue">old value</param> /// <param name="newValue">new value</param> /// <returns>The replaced string.</returns> static string Replace(string input, string oldValue, string newValue) { StringBuilder strBuilder = new StringBuilder(); int inputLen = input.Length; int oldValLen = oldValue.Length; int newValLen = newValue.Length; List<int> posList = SubString(input, oldValue); // Found that input has old value, replace it with new value. if (posList.Count > 0) { for (int i = 0; i < inputLen; ) { if (posList.Contains(i)) { for (int j = 0; j < newValLen; j++) { strBuilder.Append(newValue[j]); } i += oldValLen; } else { strBuilder.Append(input[i]); i++; } } } return strBuilder.ToString(); } /// <summary> /// To determine if subStr is sub string of str or not. If it is, add the sub string start position to the return list; null otherwise. /// </summary> /// <param name="str">string</param> /// <param name="subStr">sub string</param> /// <returns>The return list which contains the start positions of sub string.</returns> static List<int> SubString(string str, string subStr) { List<int> list = new List<int>(); int strLen = str.Length; int subStrLen = subStr.Length; int i = 0; int j = 0; while (i < strLen) { if (j >= subStrLen) { list.Add(i - subStrLen); j = 0; } if (str[i].Equals(subStr[j])) { i++; j++; continue; } j = 0; if (!str[i].Equals(subStr[j])) { i++; } } return list; } } }
Interview Q&A - Write a C# console application to implement a string replacement function
原文:http://blog.csdn.net/troubleshooter/article/details/44588697