I’m working on a project in c++ (which I just started learning) and can’t understand why this function is not working. I’m attempting to write a “Person” class with a variable first_name, and use a function set_first_name to set the name. Set_first_name needs to call a function(the one below) to check if the name has any numbers in it. The function always returns false, and I’m wondering why? Also, is this the best way to check for numbers, or is there a better way?
bool Person::contains_number(std::string c){ // checks if a string contains a number
if (c.find('0') == std::string::npos || c.find('1') == std::string::npos || c.find('2') == std::string::npos || c.find('3') == std::string::npos
|| c.find('4') == std::string::npos || c.find('5') == std::string::npos || c.find('6') == std::string::npos || c.find('7') == std::string::npos
|| c.find('8') == std::string::npos || c.find('9') == std::string::npos){// checks if it contains number
return false;
}
return true;
}
It always returns
falsebecause your logic is backwards. You are using the||operator with== nposchecks. If any one particular digit is missing from the string,== nposevaluates totrueand||is satisfied, so you returnfalse. You need to using!= nposchecks and then returntrueif any check evaluates totrue:Or:
A simplier solution is to use
find_first_of()instead offind():