2014-10-06 58 views
2
string str; 

cout << "Enter code\n"; 
getline(cin, str, '~'); 

    //some loop i can't figure out 
     size_t nFPos = str.find('//'); 
     size_t second = str.find('\n', nFPos); 
     size_t first = str.rfind('\n', nFPos); 
     str.erase(first, second - first); 
    //end unknown loop 

INPUT刪除與// C++

代碼

//註釋

// COMMENT

代碼〜

輸出開始ALL註釋行

代碼

//註釋

代碼

我不能爲我的生活弄清楚什麼樣的循環,我應該用它來刪除所有註釋開始//。它只是刪除第一條評論並繞過其他所有內容。

我已經試過了,同時,做一段時間,如

我無法弄清楚

+0

這裏是一個解決方案來讀取變量輸入通過cin: http://stackoverflow.com/questions/201992/how-to-read-until-eof-from-cin-in-c – LordOfThunder123 2014-10-06 05:12:58

+0

我可以給你循環,但可能出現的問題,由於到代碼中的''''是另一個問題,這裏沒有提到。 – 2014-10-06 05:46:11

+0

你到底在建什麼,我回答了[你以前的問題],我認爲(http://stackoverflow.com/questions/26199788/trying-to-delete-comments-from-code-inputed-by-user-c),我想這將是buggy – 2014-10-06 06:01:45

回答

1

您應該使用

while(true) 
    { 
     size_t nFPos = str.find('//');   
     if(nFPos + 1) 
     { 
      size_t second = str.find('\n', nFPos); 
      size_t first = str.rfind('\n', nFPos); 
      str.erase(first, second - first); 
     } 
     else 
     { 
      break; 
     } 
    } 

提到Here

雖然執行std::find(),如果未找到匹配項,則函數返回string::npos

其被定義爲 static const size_t npos = -1;

所以每當一個匹配會被發現它會返回第一匹配的第一個字符的位置,(因此這將是不-1)。

如果無法找到任何匹配,它會返回-1else部分將被執行(因爲-1+1=00相當於false),帶我們走出循環

+0

我知道這是爲了避免像「謝謝」這樣的評論..但我只是要感謝你。你回答了我的兩個問題,我真的很感激! – cynthiao 2014-10-06 06:02:23

+0

@cynthiao你可以通過upvoting表示感謝,我不會強迫你! – 2014-10-06 06:03:40

+0

@cynthiao哎呀,你不允許 – 2014-10-06 06:04:09