C++ 查找字符数组中最长的回文(代码几乎完成)

C++ 查找字符数组中最长的回文(代码几乎完成),c++,arrays,char,palindrome,C++,Arrays,Char,Palindrome,我想在char数组中找到最长的回文 这就是我所尝试的: #include <iostream> #include <conio.h> using namespace std; bool valid(int s, int d, int n) { return s >= 0 && d < n; } char *calcPal(char cuv[], int stanga, int dreapta, int n) { char p

我想在
char
数组中找到最长的回文

这就是我所尝试的:

#include <iostream>
#include <conio.h>
using namespace std;

bool valid(int s, int d, int n) {
    return s >= 0 && d < n;
}

char *calcPal(char cuv[], int stanga, int dreapta, int n) {
    char pal[50]={0};
    while (valid(stanga,dreapta,n))
        if(cuv[stanga] == cuv[dreapta])
        {
            if(strlen(pal))
                memmove(pal+1,pal,strlen(pal)+1);
            pal[0]=cuv[stanga];
            pal[strlen(pal)]=cuv[dreapta];
            stanga--;
            dreapta++;
        }
    return pal;

    // i'm returning the palindrome with my stanga and dreapta indexes
    // if it's not a palindrome, clearly it's not the longest so it's ok
}

char *v2(char cuv[]) {
    char max[10]={0};
    int n = strlen(cuv);
    int stanga, dreapta;
    char pal1[10]={0},pal2[10]={0};
    for (int i = 0; i < n-strlen(max); i++){
        stanga = i;
        dreapta = i+1;
        // this case is for even length words
        strcpy(pal1,calcPal(cuv, stanga, dreapta, n));
        // this case if for odd length word
        strcpy(pal2,calcPal(cuv, stanga-1, dreapta, n));
        if (strlen(pal1) > strlen(max))
            strcpy(max,pal1);
        if (strlen(pal2) > strlen(max))
            strcpy(max,pal2);
    }
    return max;
}

int main(int argc, const char * argv[]) {
    char cuv[] = "ce-miPlaceABBAwow";
    cout << v2(cuv);
    _getch();
    return 0;
}
#包括
#包括
使用名称空间std;
布尔有效(整数s,整数d,整数n){
返回s>=0&&dstrlen(max))
strcpy(最大值,pal1);
如果(strlen(pal2)>strlen(max))
strcpy(最大值,pal2);
}
返回最大值;
}
int main(int argc,const char*argv[]{
char cuv[]=“ce mipeacebawow”;

cout
dreapta
是唯一的
stanga+1
。您应该检查所有可能的组合:

for (int stanga=0;stanga<len;++stanga)
  for (int dreapta=s;dreapta<len;++dreapta) {
    strcpy(pal1,calcPal(cuv, stanga, dreapta, n));
    // this case if for odd length word
    strcpy(pal2,calcPal(cuv, stanga-1, dreapta, n));
    if (strlen(pal1) > strlen(max))
        strcpy(max,pal1);
    if (strlen(pal2) > strlen(max))
        strcpy(max,pal2);
  }
}
for(int stanga=0;stanga strlen(max))
strcpy(最大值,pal2);
}
}

在函数calcPal中,您声明了一个局部变量pal,并从函数返回它,这是非法的


这可能会给您造成问题。

if(strlen(pal))和缩进中缺少大括号。很难说你是否打算忘记牙套。习惯上也会用英语写变量名,这样网站上的每个人都可以参与。可能是@BenjyKessler的重复。如果使用大括号,则不正确。完成更改变量名称@user2079303不,读课文again@Mas“不”是什么意思?我再次阅读了您的问题,仍然看到
calcPal
(以及
v2
)返回一个指向无效内存的指针,取消对该指针的引用会导致程序具有未定义的行为。这个错误在链接问题的答案中有描述。但是我应该怎么做??