我使用getline()打開一個.cpp文件。避免評論w/C++ getline()
getline(theFile, fileData);
我不知道是否有任何方式有函數getline()避免搶奪C++註釋(/*, */
和//
)?
到目前爲止,嘗試這樣的事情並不奏效。
if (fileData[i] == '/*')
我使用getline()打開一個.cpp文件。避免評論w/C++ getline()
getline(theFile, fileData);
我不知道是否有任何方式有函數getline()避免搶奪C++註釋(/*, */
和//
)?
到目前爲止,嘗試這樣的事情並不奏效。
if (fileData[i] == '/*')
我認爲閱讀這些評論是不可避免的,但是您可以通過一次讀取一個字符來處理它們。
要做到這一點,你可以將文件加載到一個字符串,並建立一個狀態機具有以下狀態:
/
*
狀態機國家開始1
如果機器在狀態1和擊中/
角色,轉型爲狀態2。
如果機器在狀態2並擊中/
角色,轉型爲國家4。否則,轉換到狀態1。
如果機器在狀態2並擊中*
角色,轉型爲國家5。否則,轉換到狀態1。
如果機器在國家4並擊中換行字符,過渡到狀態1。
如果機器在國家5並擊中*
角色,轉型爲狀態3。
如果機器處於狀態3和擊中/
字符,過渡到狀態1(多行註釋結束時)。否則,轉換到狀態5。
如果您標記機器進入和退出註釋狀態的字符位置,則可以從字符串中去除這些字符。
或者,您可以探索正則表達式,它提供了非常簡潔地描述這種狀態機的方法。
在狀態1中,您至少需要添加一個字符串檢查 - 然後在該字符串內部處理一個可能的轉義'\「',並且* double *轉義。另一方面,替代的C++'''註釋可以直接添加(然後只檢查行結束) – usr2564301
狀態機還需要具有處於字符串(或多字節字符)內部的狀態,可以找到用C編寫的簡單過濾器, '// *'風格評論到'/ * * /'這裏的評論:http://stackoverflow.com/a/12000755/12711它可以作爲過濾器的起點,完全從流中取消評論。 –
而這女士們,先生們強調,即使是一個「簡單的」詞法分析器,只處理C/C++的子集也不是一件小事...... –
單引號指定char
和char
數據類型代表單個char.
「/ *」沒有任何意義,因爲它是由兩個char
而fileData[i]
指單個char
。
您的if
聲明需要更加健壯。
於是,一個問題是,if(fileData[i] == '/*')
是測試如果char
fileData[i]
等於'/*'
這...這不是個char
。
找到,如果一個線包含註釋,你可能會想看看下列之一:(升壓有一個正則表達式庫爲好,如果這是更多你的事情)
<regex>
in C++11strstr
in vanilla C/C++。對於多行註釋,你可能會想存儲的東西像商店標誌,指示前行的狀態是否「意見」與否,然後根據該搜索/*
或*/
標誌,隨時更新。
我猜''/ *''不是一個字符 –
請注意'/ * * /'註釋可以跨越多行,所以單行解決方案在這裏是不夠的。 – BartoszKP
使用該字符串,你的程序會在自己的源代碼上窒息。 – usr2564301