假如有字符串“6sab3kdjfkaafbd”,用最有效快速的方法去掉字符“ab3”,不能用(indexOf,substring,replace等)现成的类的方法,必须自己手工实现。
以下是我的想法..请高手指正.大家也贴一下自己的代码..讨论一下怎么才能更好... public string myReplace(string str1, string str2)
{
char[] cArray1 = str1.ToCharArray();
char[] cArray2 = str2.ToCharArray();
string s = null;
bool tag = false;
for (int i = 0; i < cArray1.Length; i++)
{
for (int j = 0; j < cArray2.Length; j++)
{
if (((i+j)<cArray1.Length) && cArray2[j] == cArray1[i + j])
{
tag = true;
}
else
{
tag = false;
break;
}
}
if (tag == true)
{
i = i + (cArray2.Length - 1);
continue;
}
else
{
s += cArray1[i].ToString();
}
}
return s;
}
以下是我的想法..请高手指正.大家也贴一下自己的代码..讨论一下怎么才能更好... public string myReplace(string str1, string str2)
{
char[] cArray1 = str1.ToCharArray();
char[] cArray2 = str2.ToCharArray();
string s = null;
bool tag = false;
for (int i = 0; i < cArray1.Length; i++)
{
for (int j = 0; j < cArray2.Length; j++)
{
if (((i+j)<cArray1.Length) && cArray2[j] == cArray1[i + j])
{
tag = true;
}
else
{
tag = false;
break;
}
}
if (tag == true)
{
i = i + (cArray2.Length - 1);
continue;
}
else
{
s += cArray1[i].ToString();
}
}
return s;
}
{
var enu1 = str1.GetEnumerator();
var enu2 = str2.GetEnumerator();
if (enu2.MoveNext())
{
StringBuilder sb = new StringBuilder();
while (enu1.MoveNext())
{
if (enu1.Current != enu2.Current)
{
sb.Append(enu1.Current);
}
else if(!enu2.MoveNext())
{
enu2.Reset();
enu2.MoveNext();
}
}
return sb.ToString();
}
else
{
return str1;
}
}
如果回到turbo c,那就自己写个“模式匹配”哦!
StringBuffer stb = new StringBuffer();
char[] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 'a' || c[i] == 'b' || c[i] == '3') {
} else {
stb.append(c[i]);
}
}
System.out.println(stb.toString());
哈,别给我零分哦。
static class Program {
/// <summary>
/// 查找值在字符串中的位置
/// </summary>
/// <param name="str">要查找的字符串</param>
/// <param name="value">要查找的值</param>
/// <param name="startIndex">开始位置</param>
/// <param name="endIndex">结束位置</param>
/// <returns>返回找到的位置。若未找到,则返回-1</returns>
public unsafe static int IndexOf(char* str, char* value, int startIndex, int endIndex) {
for (int i = startIndex;( i < endIndex && str[i] != '\0') || endIndex == -1; i++) {
int p = 0;
for (; value[p] != '\0'; p++) {
if (str[i] == '\0') return -1;
if (str[i] != value[p]) {
goto CONTINUE;
}
i++;
}
return i - p;
CONTINUE:
;
}
return -1;
}
/// <summary>
/// 返回字符串首字符的指针
/// </summary>
/// <param name="str">字符串</param>
unsafe static char* CharPtr(string str) {
fixed (char* p = str) {
return p;
}
}
unsafe static void Main() {
int index = IndexOf(CharPtr("6sab3kdjfkaafbd"), CharPtr("aaf"), 0, -1);
}
}
{
Console.WriteLine(Trim("6sab3kaab3djfkaafbd", "ab3"));
Console.ReadKey();
} private static string Trim(string s, string pattern)
{
int startPosition = 0;
int newPosition;
StringBuilder sb =new StringBuilder();
while(true)
{
startPosition = Location(s, startPosition, pattern[0]);
if (startPosition != -1)
{
if (Match(s, startPosition, pattern))
{
s=s.Remove(startPosition, pattern.Length);
}
else startPosition++;
}else return s;
}
} /// <summary>
/// 获取下一个pattern的启示字母的位置
/// </summary>
/// <param name="s">母串</param>
/// <param name="startPosition">开始查找的位置</param>
/// <param name="c">pattern的首字母</param>
/// <returns>
/// 匹配位置。为匹配到则返回-1;
/// </returns>
private static int Location(string s, int startPosition, char c)
{
for (int i = startPosition; i < s.Length; i++)
{
if (s[i]==c) return i;
}
return -1;
} /// <summary>
/// 判断是否匹配pattern
/// </summary>
/// <param name="s">母串</param>
/// <param name="startPosition">母串中开始匹配的位置</param>
/// <param name="pattern">要匹配的pattern</param>
/// <returns>匹配返回true;否则 false</returns>
private static bool Match(string s, int startPosition, string pattern)
{
//首字母不需再次判断,故从1开始
for (int i = 1; i < pattern.Length; i++)
{
if (s[startPosition+i]!=pattern[i]) return false;
}
return true;
}
{
MessageBox.Show(EggPain("6sab3kdjfkaafbd", "ab3") + "\r\n" + "6sab3kdjfkaafbd".Replace("ab3", ""));
} private string EggPain(string M, string S)
{
StringBuilder sOut = new StringBuilder();
int i = 0,j=0;
bool IsCompare = false;
while(i<M.Length)
{
for (j = 0; j < S.Length; j++)
{
if (M[i+j].CompareTo(S[j])!=0)
{
sOut.Append(M, i, 1);
IsCompare = false;
break;
}
IsCompare = true;
}
i+=IsCompare?j:1;
}
return sOut.ToString();
}
string str = "6sab3kdjfkaafbd";
Console.WriteLine(str.Remove(2, 3));
Console.ReadKey()