一個面試問題.c文件我讀:格式使用的sed
比方說,你在我的球隊,我已經決定我爲 代碼格式化真正堅持己見。但是我有奇特的口味,有一天我決定我想讓你的代碼中所有的圓括號都非常清楚。
假設您已經有一組使用C,C++或Java的源文件。您的 的選擇。我希望你對它們進行修改,以便在每個源文件中,每個開括號和右括號在其之前和之後都有一個空格字符 。如果圓括號周圍還有任何其他空格,則它會摺疊爲單個空格字符。
例如,下面的代碼:
foo (bar (new Point(x, graph.getY())));
將被修改爲如下所示:
foo (bar (new Point (x, graph.getY ())));
如何使用sed做到這一點?
編輯
我的做法
sed -Ee 's/([()])([()])([()])/\1 \2 \3 /g' -e 's/([ ]{1,}|^|([0-9a-zA-Z()]))([()])([ ]{1,}|$|([0-9;a-z()]))/\2 \3 \5/g' filename.c
這種失敗在像func(a);
我的代碼輸出情況下,爲func (a);
這個面試問題顯示了面試官的無知。RE不能平衡括號或計算字符(比如''',以便知道你是否在C字符串內部或外部),所以你最終會在字符串內部改變括號內的空格。如果你使用RE來完成這個 – fferri
@mescalinum假定括號在C字符串中不存在,那麼我們如何解決這個問題,以及如何通過我的代碼失敗的情況 –
當然,他們可以自引入[遞歸](http:// www.regular-expressions.info/recurse.html)和[平衡組](http://www.regular-expressions.info/balancing.html)。 –