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