这个为什么不能给res赋值啊

#include 
using namespace std;
#include 

string manacherstring(string s)
{
    string* res=new string[23];
    int index=0;
    for(int i = 0;i < 23;i++) 
    {
        res[i]=(i & 1)==0?'n':s[index++];
        
    }
    cout<<(*res)[1];
    return *res;
}
int main(int argc,char** argv) 
{
    string s ="abcdekedcba";
    string s1=manacherstring(s);
}


#include <iostream>
#include <time.h>
using namespace std;
string manacherstring(string s)
{
    string res;
    int index = 0;
    for (int i = 0; i < 23; i++)
    {
       res += (i & 1) == 0 ? 'n' : s[index++];
    }
    cout << (res);
    return res;
}
     
int main(int argc,char** argv) 
{
    string s ="abcdekedcba";
    string s1=manacherstring(s);
}
 

什么意思?

res 是字符串数组,而不是字符串
res[0] res[1] .... res[23] 是一个个字符串 ,你返回的是res[0]
你应该把res声明为string

string manacherstring(string s)
{
    string res;
    int index = 0;
    for (int i = 0; i < 23; i++)
    {
        res += (i & 1) == 0 ? 'n' : s[index++];

    }
    cout << (res);
    return res;
}