C++ string literals, i.e., something like "literal" are immutable although C++03 allowed assigning a pointer to such a literal to a char* (this privilege was deprecated and removed for C++11). Trying to change a character of a string literal is undefined behavior:
char* s = "literal"; // OK with C++03; illegal with C++11 and later
s[0] = 'x'; // undefined behavior
C++ std::string objects are certainly mutable assuming they are not declared as std::string const. If you consider the sequence of char objects to be independent of each other it is OK to assign to individual objects. It is, however, quite common that the strings actually contain Unicode encoded as UTF-8 bytes. If that’s the case changing any element of the string may destroy the proper encoding, e.g., because a continuation byte gets replaced by something else.
So, yes, the strings are mutable but it may not be safe from a semantic point of view to assign to individual elements.