如何解决错误:ISO C ++禁止在Lambda函数中比较指针和整数[-fpermissive]
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()
的函数。有人可以帮我解决吗?
我的目的是删除以空格分隔的字符串中的所有空格,并返回指向更改后的数组的最后一个元素的指针。
解决方法
a
和b
是同一类型,但是" "
不是字符,用于字符串文字。考虑更改为return a==b && a==' ';
您实际上有两个问题:
-
第一个是您得到的错误,这是由于
a==" "
导致的,您将单个char
变量(a
)与字符串文字进行比较。要与单个空格进行比较,您需要与字符' '
进行比较。 -
第二个错误是您为
newEnd
使用了错误的迭代器,或者为比较lambda使用了错误的类型。如果
newstring
是std::string
,则lambda是正确的,它应该以两个字符为参数。问题在于,然后std::unique
将返回std::string::iterator
。如果
newstring
是std::vector<string>
,则lambda的参数是std::string
值。newEnd
迭代器将是正确的。
最后,要删除字符串中的所有空格,那么std::unique
似乎是一个错误的选择(尤其是因为它应该删除重复项)。
我宁愿推荐std::erase
,例如:
newstring.erase(std::erase(begin(newstring),end(newstring),' '),end(newstring));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。