find method will find the fist parameter ";" in strHello, starting from second parameter i.e. 0.
Now the nPositoinOfSemiColon will contain either string::npos which means the string provided to find method was not found in strHello. Or in our case, 5 which is the location of ";".
strHello.substr(0, nPositoinOfSemiColon );
will return "Hello", i.e. 5 characters starting from location 0 in strHello.
Now consider
int nPositionOfSecondSemiColon = strHello.find(";", nPositionOfSemiColon);
Well... writing following line of code will... wonder what...
strHello.substr(nPositionOfSemiColon, nPositionOfSecondSemiColon);
CAUSE AN ERROR!!! FOLKS!!! ERR GRR ERROOORRR... a vicious cruel ugly error... heh heh heh...
Poor baby programmers will asK "But why Uncle why???"
Because, of the values in variables at this time are...
nPositionOfSemiColon = 5
AND
nPositionOfSecondSemiColon = 11
That means
strHello.substr(5, 11);
i.e. extract 11 characters starting from location 5 in strHello.
Whereas, 11 is total length of strHello...
The right way to go is
strHello.substr(nPositionOfSemiColon,
nPositionOfSecondSemiColon - nPositionOfSemiColon);
That means
strHello.substr(5, 6); // That means ";WORLD"
Cheers folks... have fun... remember... coding is a noble pursuit... so just keep hitting it hard... savor the wonders and joys of turning real world into programming language codes, and bear the tensions with enough tolerance...