Help me understand this line of code

Jun 8, 2013 at 6:51pm
1
2
3
if(bookAuthor[c].find(search,0) < bookAuthor[c].npos){

// displays bookTitle[c] and bookAuthor[c] 


I think "bookAuthor[c].find(search,0)" starts looking at the 0th character of the string stored in the cth index of the bookAuthor array for a string that matches the value of search, but I'm not really sure what "< bookAuthor[c].npos)" does. I looked up .npos, but it doesn't make sense to me.
Jun 8, 2013 at 8:08pm
1) That would be better to write as bookAuthor[c].find(search,0) != bookAuthor[c].npos
2) if substring is not found, .find() will returns npos. That condition can be read as "if search substring found"
Jun 8, 2013 at 11:16pm
Isn't better to just compare it to std::npos?

EDIT- I mean string::npos.

bookAuthor[c].find(search,0) != string::npos
Last edited on Jun 8, 2013 at 11:18pm
Jun 9, 2013 at 12:07am
std::string::npos is a static data member of class std::basic_string or simply std::string. You can specify a static data member using the class name as it is done in the beginning of this sentence or using object name. So this two statements with rare exception are identical

std::string::npos;

and

std:;string s;

s.npos;

std::string::npos is used to signal the situation "beyond the string".

So this statement

if(bookAuthor[c].find(search,0) < bookAuthor[c].npos){

means that object 'search' was found in the string that is it is not beyond the string. Usually with npos instead of object of class std::string the class name is used

if(bookAuthor[c].find(search,0) < std::string::npos){
and it would be better to write

if(bookAuthor[c].find(search,0) != std::string::npos){
Topic archived. No new replies allowed.