c++日常练习(8)

输出回文字符串。

例:输入“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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘密之乡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值