I think the problem describes exactly how the student is expected to solve it. It may not be a good way, but it seems close to what OP originally had.
As I understand the limitation are that they haven't learnt getline (hence the funny delimiter), and loops and containers (hence the four string objects).Write a program that reads a string containing exactly four words, (separated by * symbols) into a single string object. Next, extract each word from the original string and store each word in a string object. Then concatenate the words in reverse order to form another string. Display both the original and final strings. (Hint: To extract the words, you should use the 'find' member function to find each symbol *, assign the characters up to the * to one of the four string objects, and then remove those characters from the original string.)
The funny thing is that you are supposed to destroy the original and yet display it (one might also use substr), but a lazy way around it is to display the original before you start destroying it. The output will be the same one way or another.
I don't see a requirement to put in a new delimiter. For example, if I inputted "ant*bear*cobra*delta", accepted output might be "deltacobrabearant".
The original warnings were about conversion from size_t to int. String method find returns a size_t (which is an unsigned type), you were storing it in an int. For extremely large strings an int may not be able to store a legal return value correctly. For small strings this problem won't happen but still you might fix this by declaring remove_1 etc as size_t.