输出回文字符串。
例:输入“asdfgfdas”
输出结果是“dfgfd”
输入“addf”
输出结果是“dd”
解体思路:本题是对字符串的基本应用。在例题中,我们发现回文字符串又两种输出结果。1、ada形式;2、aa形式。
因此,我们应该分别对两种形式都做出考量。
1、首先确定中心值。ada形式为的。aa形式为第一个a。
2、从中心坐标左右延伸,判断是否相等,是就继续判断左右第二个值。不相等就输出结果。
注意:在判断左右值之前,要先判断左值坐标小于或者等于中心值坐标。并且右值相应坐标不越界,即右值不为NULL
下面,看代码
#define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"
void arr1(char*x)
{
//定义临时变量:回文字符串的第一个字母所在位置num_new,长度sre_ing以及临时变量怒num
int num,num_new = 0,str_long=0;
//遍历数组,查找aba形式的回文字符。
for (int i = 0; x[i] ; i++)
{
num = 1;
while (num <= i && x[i + num])
{
if (x[i + num] == x[i - num])
num++;
else break;
}
num--;
if (2 * num + 1 > str_long)
{
num_new = i - num;
str_long = 2 * num - 1;
}
}
//遍历数组,查找aa形式的回文数组。
for (int i = 0; x[i]; i++)
{
num = 1;
while (num <= i+1 && x[i + num])
{
if (x[i + num] == x[i - num+1])
num++;
else break;
}
num--;
//注意:这里的str_long长度已经存入了aba形式的回文字符串最长值
if (2 * num > str_long)
{
num_new = i - num+1;
str_long = 2 * num;
}
}
//输出
for (int i=0;i<str_long ;i++)
{
printf("%c", x[num_new+i]);
}
}
int main()
{
char arr[100];
scanf("%s", arr);
arr1(arr);
return 0;
}