int main()
{
const char* plating[8] = { "Agsdf","AgNsdfi","CuAsdfg","Nsdfi","NsdfiAg","NiPsdfd","Nonsfe","Psfd" };
bool press = false;
press = std::find(begin(plating),end(plating),"88love");
cout<<press<<endl;
return 0;
}
** OutPut :- 1 **
** Accepted Output :- 0 **
CodePudding user response:
std::find does not return 1. press is not 1 either. What happens is that std::find returns an iterator, which in your case is just a pointer. A pointer converted to a bool is true unless it is nullptr. When printing that true you get 1 in the output.
The right way to use std::find is to compare the returned iterator to end(plating) to know if the string was found. However, your are comparing pointers and even if you call find with a string that is in the array you do not necessarily get the right result.
Instead you should use std::string:
std::vector<std::string> plating = {" ..." ,"..."};
std::string needle{"88love"};
if ( std::find(plating.begin(),plating.end(),needle) == plating.end()) {
std::cout << needle << " was not found! \n";
}
CodePudding user response:
If std::find() does not find the element it returns an iteretor to last. Therefore changing press = std::find(begin(plating),end(plating),"88love"); to press = std::find(begin(plating),end(plating),"88love")!=last(plating); should solve your problem.
The way you try to do it the iterator is cast to a bool, which will be true if the returned iterator points to last.
