2009-11-11 29 views
0

我有一個字符串,可能包括或不包括C++註釋(多林和單行),我需要去除這些註釋才能夠使用該字符串。我目前的想法是使用NSScanner來做到這一點 - 找到打開和關閉多行註釋的位置,並刪除該部分字符串,並找到打開一行註釋和EOL字符的位置,並刪除該部分字符串。使用NSScanner從字符串中刪除註釋?

你會這樣做嗎?你會採取什麼做法?如果它很重要,字符串可能會有幾兆字節的大小,所以性能是一個問題。

回答

0

我的解決辦法:

通過串使用NSScanner轉到並標記每個多線的位置和單一評論和所有字符串(單引號和雙引號之間的任何內容)。將位置存儲在代表每個項目範圍的NSValues數組中。

然後迭代評論數組,確保每個評論不在一個字符串內。檢查這一點的方法是確保每個註釋的位置不大於每個字符串的位置,並且註釋的位置不落入每個字符串的位置+長度。

和瞧。任何不屬於的內容都可以安全地刪除,因爲這是一個有效的評論。

1

this thread,我認爲最好的建議是通過C++預處理器運行字符串。

+0

雖然如果字符串也有'#include','#define','#etc'指令,可能會有不良的副作用。 – mob 2009-11-11 17:34:27

+1

我的用戶可能沒有在他們的系統上安裝開發人員工具。 – ruipacheco 2009-11-11 17:38:53

0

不要忘記跟蹤引號。測試用例:

  • "/*Ceci n'est pas une commentaire*/"
  • '/**/'鍵(Mac OS/Mac OS X的OSType文字)
  • '//!\n'
  • "This string does not contain a // comment"

在所有這些情況下,你不應該檢測評論。

反過來也是如此:

  • //Ceci n'est pas une "string"
  • /*This comment does not contain an OS'Type' literal*/
+0

是的,我知道。誰說軟件很簡單? – ruipacheco 2009-11-12 17:30:46