What string operations are basic
There are many "complete bases" for operations on strings. One is based on the representation
$$ \Sigma^* = \epsilon + \Sigma \Sigma^*. $$
In words, a string is either empty or is composed of a character and a string. In order to use this representation, we need the following functions:


nil – the empty string
cons(x,s) – the string consisting of the character x followed by the string s
null(s) – true if s is empty
car(s) – returns the first character of a non-empty string
cdr(s) – returns the string resulting from removing the first character of a non-empty string


The terminology is from Lisp; cdr is read could-er or cudder.

Another basis considers strings as arrays. There is a standard basis for reading strings:


len(s) – the length of s
s[i] – the character at position i


For writing strings there are several options. In the immutable case, one choice is:


"" – the empty string
str(x) – the string consisting of the character x
cat(s1,s2) – the string resulting from concatenating s1 and s2


If strings are allowed to be mutable, we can add an operation s[i] = x, changing the character at position i to be x.

One can think of many other bases. Some will be more efficient than others. It all depends on what exactly you are trying to capture, what your goal is.