I wanted to make a new buf array of size stringlength.
Why?

buf[i] isn't what I should return? The problem with the code is that it gives an error that return can't convert from char to String&.
Your function return type states that you want to return a reference to a String. What is the type of buf[i]? In fact, buf[i] is not a character in the string (it is a null character).

I did delete []buf because I wanted to avoid a memory leak. Is this wrong?
Pairing new[] with delete[] to avoid a memory leak is not wrong. What is wrong is that you want to add 1 to each character in the string but delete[] buf destroys the string, thus there is nothing to add to any more.