【问题标题】:deleting ALL comment lines that start with // c++删除所有以 // c++ 开头的注释行
【发布时间】:2014-11-30 08:41:37
【问题描述】:
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

输入

代码

//评论

//评论

代码~

输出

代码

//评论

代码

我一生都无法弄清楚我应该使用什么样的循环来删除所有以 // 开头的 cmets。它只是删除第一条评论并绕过其他所有内容。

我尝试过 for、while、do while 和 if

我想不通

【问题讨论】:

  • 这里是通过cin读取变量输入的解决方案:stackoverflow.com/questions/201992/…
  • 我可以给你循环,但是由于//在代码中可能出现的问题是另一个问题,这里根本没有提到。
  • 你到底在建什么,我回答了[你之前的问题](stackoverflow.com/questions/26199788/…),我认为它会有问题
  • @DigitalBrain 一个程序,用于读取用户的输入(代码),然后删除所有注释行、任何多余的空格(超过 1 个空格)并计算所有标记。然后显示编辑后的代码。
  • 太好了,干得好

标签: c++ string loops comments erase


【解决方案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 ),使我们脱离循环

【讨论】:

  • 我知道它说要避免像“谢谢”这样的 cmets .. 但我只需要谢谢你。你回答了我的两个问题,我真的很感激!
  • @cynthiao 你可以点赞表示感谢,我不是强迫你!!
  • @cynthiao 哎呀,你不被允许
  • @cynthiao 我想你现在可以
  • 为什么无限循环有中断?为什么不是“while (npos != (nFPos = str.find("//")) ) {}”?
猜你喜欢
  • 2020-12-13
  • 2015-12-04
  • 2015-01-18
  • 2016-05-21
  • 1970-01-01
  • 2012-01-02
  • 2014-05-07
  • 1970-01-01
相关资源
最近更新 更多