用C++编写函数 int palindrome(char *str) 在字符串str的任意

用C++编写函数 int palindrome(char *str) 在字符串str的任意位置插入字符,使其变为回文串。 函数返回最少插入字符的数量。 在main函数中调用该函数

第1个回答  2014-03-09
#include <string.h>
#include <stdio.h>

int palindrome(char *str)
{
int nLen = strlen(str);
if (nLen<1)
{
return -1;
}

//检查是否已经为回文
bool bTure = true;
int nHalf = nLen /2;
for (int i=0; i<nHalf; ++i)
{
char cLeft = str[i];
char cRight = str[nLen-i-1];
if (cLeft!=cRight)
{
bTure = false;
break;
}
}
if (bTure)
{
return 0;//是回文,则需要插入0个
}

//找到最后面有几个字符相同
char cCompare = str[nLen-1];
int nSame = 1;
for (int i=nLen-2; i>-1; --i)
{
if (str[i]==cCompare)
{
++nSame;
}
else
{
break;
}
}

return nLen - nSame;
}

void main()
{
char * ch = "123210";
int num = palindrome(ch);
printf("最少插入个数为:%d", num);
}

 楼上的答案,“1233421”这个字符串你算出来是4,不正确啊!

追问

好像错了😣

第2个回答  2014-03-09
#include<stdio.h>

int palindrome(char *str,int n);

void main()
{
char * ch = "ASDFGHAHGS";
int num = palindrome(ch, 10);
printf("最少插入个数为:%d", num);
}

int palindrome(char *str,int n)//最好调用时加上字符串的长度
{
int num = 0;

for (int i = 0; i < n; ++i)
{
if (str[n - i - 1 + num] != str[i])
{
++num;
}
}

return num;
}追问

好像不对呀!

追答

额,哪里不对,自己再改改,(*^__^*) 嘻嘻……

本回答被网友采纳
相似回答