【问题标题】:error: ISO C++ forbids comparison between pointer and integer [-fpermissive] in a Lambda function错误:ISO C++ 禁止在 Lambda 函数中比较指针和整数 [-fpermissive]
【发布时间】:2020-08-21 02:46:12
【问题描述】:
vector<string>::iterator newEnd=unique(newstring.begin(),newstring.end(),[](const char &a,const char &b){return a==b && a==" "; });
newstring.erase(newEnd,newstring.end());

我一直在尝试运行这段代码,但它在 lambda 函数上给了我一个错误。

错误:ISO C++ 禁止在指针和整数之间进行比较 [-fpermissive]

这在 HackerRank 中用于名为 split_strings() 的函数。谁能帮我解决一下?

我的意图是删除以空格分隔的字符串中的所有空格,并返回一个指向已更改数组的最后一个元素的指针。

【问题讨论】:

  • vector&lt;string&gt;::iterator newEnd= -- 使用auto newEnd = ,避免声明错误的返回类型。

标签: c++ c++17


【解决方案1】:

ab 是同一种类型,但" " 不是字符,它用于字符串字面量。考虑换成​​return a==b &amp;&amp; a==' ';

【讨论】:

    【解决方案2】:

    你实际上有两个问题:

    1. 第一个是您得到的错误,这是因为 a==" ",您将单个 char 变量 (a) 与字符串文字进行比较。要与单个空格进行比较,您需要与 字符 ' ' 进行比较。

    2. 第二个错误是您对 newEnd 使用了错误的迭代器,或者您对比较 lambdas 使用了错误的类型。

      如果 newstringstd::string 则 lambda 是正确的,它应该采用两个字符作为参数。问题是std::unique 会返回一个std::string::iterator

      如果 newstringstd::vector&lt;string&gt;,则 lambda 的参数是 std::string 值。 newEnd 迭代器将是正确的。


    最后,要删除字符串中的所有空格,那么std::unique 似乎是一个相当糟糕的选择(尤其是因为它应该删除重复项)。

    我宁愿推荐std::erase,如:

    newstring.erase(std::erase(begin(newstring), end(newstring), ' '), end(newstring));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多