删除所有以// c ++开头的注释行

时间:2014-10-06 05:07:42

标签: c++ string loops comments erase

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

//注释

// COMMENT

代码〜

输出

// COMMENT

我不能为我的生活弄清楚我应该使用什么样的循环来删除以//开头的所有评论。它只删除第一条评论并绕过其他所有评论。

我已经尝试了,同时,一会儿,如果

我无法弄清楚

1 个答案:

答案 0 :(得分: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)。

如果无法找到任何匹配项,则会返回-1并且else部分将被执行(因为-1+1=00相当于{{ 1}}),把我们带出循环