Several things from your question:
First the string part. You have many options (a) you can indeed use
insert but the method requires an iterator to define the position for insertion. (b) the easiest to use simply += e.g
char p='x';
std::string A("test");
A+=x;
// A is now testx
Second :note your mistake in your function, you have used pl[0]
but it is a simple character. It is not an array.
Third: I don't understand why you have the variable winner. you assign a value to it and then return from the function. The means that the variable is immediately lost.
do this return 'M'; instead.
Also you claim to return an integer from find_player but you return a character. That is acceptable to the compile (with warnings) but unlikely to be the intent. Surely you wanted to return 0 if it is a draw and 1 if player one won and 2 (or maybe -1) if player 2 won.
Also, don't make a string and then compare, just use the individual result. e.g
// after test for p1,p2 only are s,r,p.
if (p1==p2) // draw
return 0;
if (p1=='r')
return (p2=='p') ? 2 : 1;
// .. etc
you might want a switch statement, you might also use a lookup table etc.
As for production code, I feel that you need a lot more experience getting code to work and compile before you even ask the question. Nobody checks in code that doesn't compile. Only then do we discuss classes and methods etc. There are many dicussions on the subject and over a time you develop your own style that needs to be adjusted to the project you are working on, however, don't worry until you have written some more c++, then read Scott Myers 50 and 35 C++ Tips, then worry about it.