Your book is incorrect. Constructors are only invoked when you are creating a new object. (The other cases you mentioned will use your type conversion constructor) In the case of assignment, you are modifying an existing object. You'll have to overload the assignment operator as IfYouSaySo stated.
Code:
string& operator=(char* s) 
{
  delete[] str;
  len = strlen(s);
  str = new char[len];
  strcpy(str, s);
  return *this;
}