2016-11-19 51 views
0

我想使它所以每個代碼總是看起來是一樣的,不管你使用100位等格式文本(代碼),去掉空格和東西

因此,例如

Example: lwz r4,-0x0018(rtoc) 

這代碼的外觀應該如何,下面是如何輸入代碼的例子。

lwz r4, -0x0018  (rtoc) 
lwz  r4,-0x0018(rtoc) 
lwz r4,-0x0018 (rtoc) 

還有其他的代碼,但我認爲一般規則是。

(無空格周圍「」和「周圍沒有空間‘(’和‘)’)。

由於這將打通線循環多次,該方法最好是相當快的。

我不反對使用不安全的代碼等等:)

感謝

編輯:!

代碼,也可以像: 「FMUL F0,F1,F2」,並同樣適用那裏。

我試過的是通過它看作一個指針(不安全)。 但是,雖然我可以替換字符,我不能刪除他們說。 我想我必須做沒有指針,但我仍然不知道如何找出循環的規則,即使我有點抓住它。 (ifs等格式)。

EDIT2:

這是當前亂碼我似乎讀懂了工作。

private string FormatCode(string text) 
    { 

     int length = text.Length; 

     char last = '.'; 

     for (int i = 0; i < text.Length; i++) 
     { 
      char c = text[i]; 

      if (c == ' ' && last == ',') 
      { 
       text = text.Remove(i, 1); 
       i--; 
      } 
      else if (c == ',' && last == ' ') 
      { 
       text = text.Remove(i-1, 1); 
       i--; 
      } 
      else if(c=='(' && last == ' ') 
      { 
       text = text.Remove(i - 1, 1); 
       i--; 
      } 
      else if(c == ' ' && last == ')') 
      { 
       text = text.Remove(i, 1); 
       i--; 
      } 
      else if (c == ' ' && last == ' ') 
      { 
       text = text.Remove(i, 1); 
       i--; 
      } 

      last = c; 

     } 

     return text; 
    } 
+2

你嘗試過什麼做的?顯示你的努力,並解釋他們爲什麼不爲你工作 – UnholySheep

+0

@UnholySheep增加了一點:) – Zerowalker

回答

2
var a = "lwz r4, -0x0018  (rtoc)"; 
var b = string.Join(" ", a.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries)) 
    .Replace(" ,", ",").Replace(", ", ",") 
    .Replace(" (", "(").Replace("(", "(") 
    .Replace(")", ")").Replace(") ", ")"); 

這種變異速度更快,但是更長:

var a = "lwz r4, -0x0018  (rtoc)"; 
StringBuilder sb = new StringBuilder(a.Length); 
var spaceFound = false; 
var ignoreSpaces = true; 
for (int i = 0; i < a.Length; i++) 
    if (a[i] == ' ') 
     spaceFound = true; 
    else if (a[i] == '(' || a[i] == ')' || a[i] == ',') 
    { 
     sb.Append(a[i]); 
     ignoreSpaces = true; 
    } 
    else 
    { 
     if (spaceFound && !ignoreSpaces) 
      sb.Append(' '); 
     sb.Append(a[i]); 
     spaceFound = false; 
     ignoreSpaces = false; 
    } 
var b = sb.ToString(); 
+0

可悲的是,代碼並不總是擁有所有這些字符,我添加了另一個代碼。 認爲那些基本上是基本的,或者你只有「,」或者你有「,」和「()」, 「()」和「,」的數量可以不同,但​​對於大多數代碼它是1-3「,」和1「()」 – Zerowalker

+0

@Zerowalker我想它應該適用於'fmul f0,f1,f2'。 – AlexD

+0

試過了,它確實在「,」周圍留下了一個空格。 將它與我製作的混亂代碼相比似乎更快一些。 然而,如果它在f3之後的「fmul f1,f1,f3」處有一個空格,它就會失敗,如果它是2或更多,它只會使它相同(一個空格) – Zerowalker