字符串回文,翻转

前言

从这篇文章开始进行算法的学习,开启新的篇章。


一、字符串回文

字符串回文 : 是指一个字符串从左到右读和从右到左读是一样的,即它的字符顺序颠倒后仍然保持不变。例如,"level"和"madam"就是回文字符串。

在编程中,我们可以使用不同的算法来判断一个字符串是否是回文。

方法 一:
将字符串 一分文二,通过第一个下标 i 和 最后一个下标 j , 从两边开始逐个字符地向中间进行比较。如果 两边相等则不进入 if 语句,返回1,是回文。否则 返回 0 ,不是回文。需要注意的是,数组下标从 0 开始,所以 j = len - 1

int palindrome(char* str)
{
    int i = 0, j = 0;
    int len = strlen(str);

    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        if (str[i] != str[j])					//不相等则 返回 0,不是回文
        {
            return 0;
        }
    }
	return 1;								//返回 1,是回文
}

int main(void)
{
	int ret = palindrome("124321");				//要检测的字符串
    if (ret)
    {
        printf("是回文\n");
    }
    else
    {
        printf("不是回文\n");
    }
	return 0;
}

方法 二:
方法二 主要是将 原字符串进行翻转(字符串翻转下面会讲),将翻转后的字符串与原字符串进行比较,如果相等,是回文。否则,不是回文。使用 strncmp 函数进行比较字符串是否相等。
由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
	char str[20];
	char buff[20];
	int ret;

	printf("请输入字符串:");
	scanf_s("%s",str, sizeof(str));					//输入要判断的字符串

	int len = strlen(str);
	buff[len] = '\0';

	for (int i = len-1; i >= 0 ; i--)
	{
		buff[len-1 - i] = str[i];
		if (i == 0)
		{
			if (strncmp(buff, str, 20) == 0)			// 相等返回 0
				printf("是回文\n");
			else										
			{
				printf("不是回文\n");
			}
		}
	}
	return 0;
}

注意 :
推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。方法二 如果 禁止 使用 strncmp 函数,则 无法实现功能。要学会,理解方法一的思想,更加简便。

二、字符串翻转

字符串翻转是指将一个字符串的字符顺序颠倒过来,即将字符串的最后一个字符放在第一个位置,倒数第二个字符放在第二个位置,以此类推,最后得到一个完全颠倒的字符串。

在编程中,我们可以使用不同的算法来实现字符串翻转的功能。

方法 一:
主要是 通过定义一个中间变量的方法,进行字符串元素的 替换。先将前面的字符 先赋给 中间变量 temp ,再 将 后面的字符 赋给 前面的字符,最后 中间变量 temp 赋给 后面的字符。

由于 数组下标从 0 开始,所以 j = len -1 ;

void restring(char* str)
{
    int i, j;
    int len = strlen(str);
    char temp = 0;

    for (i = 0, j = len - 1; i < j; i++, j--)
    {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

int main(void)
{
    char str[20] = {"12345"};
	restring(str);
	
	printf("str = %s\n", str);
	return 0;
}

方法 二:
输入要反转的字符串,即可打印翻转结果。
定义两个字符数组,分别存放原字符串 和 翻转后的字符串。将原字符串的字符一次从后向前 传入 buff 数组即可。

由于 数组下标从 0 开始,所以 i = len -1 ;

int main(void)
{
	char str[20];
	char buff[20];

	printf("请输入字符串:");
	scanf_s("%s",str,sizeof(str));

	int len = strlen(str);
	printf("翻转结果:");
	for (int i = len-1; i >=0; i--)
	{
		buff[len -1 - i] = str[i];
		printf("%c", buff[len -1 -i]);
	}
	return 0;
}

在这里插入图片描述
注意 :
还是推荐第一种写法,使用封装函数的方法进行 字符串回文判断,更利于代码的移植。要学会,理解方法一的思想,更加简便。


总结

字符串回文,翻转 是笔试热门题,大家好好理解。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

糖果罐子♡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值