问题描述
程序的目的是收集输入的字符串,看有多少符合特定的字符串
#include <algorithm>#include <iostream>#include <vector>#include <list>#include <string>using namespace std;int main(){ list<string> ls; string s; while (cin>> s)ls.push_back(s); cout<< count(s.cbegin(), s.cend(), 'a');}
编译时报错如下
1>------ 已启动生成: 项目: ConsoleApplication1, 配置: Debug Win32 ------1> 源.cpp1>e:vs2015vcincludexutility(3186): error C2446: “==”: 没有从“const char *”到“int”的转换1> e:vs2015vcincludexutility(3186): note: 没有使该转换得以执行的上下文1> e:vs2015vcincludexutility(3197): note: 参见对正在编译的函数 模板 实例化“std::iterator_traits<_InIt>::difference_type std::_Count_np<const char*,char[2]>(_InIt,_InIt,const _Ty (&))”的引用1> with1> [1> _InIt=const std::codecvt<wchar_t,char,_Mbstatet>::_Byte *,1> _Ty=char [2]1> ]1> c:users0edocumentsvisual studio 2015projectsconsoleapplication1consoleapplication1源.cpp(13): note: 参见对正在编译的函数 模板 实例化“int std::count<std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,char[2]>(_InIt,_InIt,const _Ty (&))”的引用1> with1> [1> _InIt=std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>,1> _Ty=char [2]1> ]1>e:vs2015vcincludexutility(3186): error C2040: “==”:“int”与“const char [2]”的间接寻址级别不同========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这是第一次编译时的情况,后来我在相同项目下写了别的程序,当再次把该程序覆盖之后编译又完全正常,是怎么回事?是项目冗余问题吗?
好吧,我复制了答案中的代码,所以没问题。一楼你改了代码也不说一声,我愣是没看出来
问题解答
回答1:#include <algorithm>#include <iostream>#include <vector>#include <list>#include <string>using namespace std;int main(){ list<string> ls; string s; while (cin>> s)ls.push_back(s); cout<< count(ls.begin(), ls.end(), 'a');}
主要“cout<< count(s.cbegin(), s.cend(), 'a');”错误,s是一个string,其内元素不能与字符串对比。
回答2:类型不匹配。如果要从list中找应该是:
cout<< count(ls.begin(), ls.end(), 'a');
如果要从s中找应该是
cout<< count(s.cbegin(), s.cend(), ‘a’);