Review of three constructors for a String class
Your lengths are off by 1 everywhere. An empty string has length 0 not 1, "Hello" has length 5 not 6, etc. 

Your constructor from the const char* can just assign every character in the loop (since we know the nlengthth character of input will be \0, right? Even better would be to use memcpy:

nlength = strlen(input); 
nstring = new char[nlength + 1];
memcpy(nstring, input, nlength + 1);


Also you have to be careful on the copy constructor. What happens in this code?

string hello("hello");
hello = hello;