栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】三种方法解决字符串逆序问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】三种方法解决字符串逆序问题

目录
  • 字符串逆序
    • 迭代方法
    • 递归方法(少参数 )
      • (有strlen)
      • (无strlen)
    • 递归方法二(多参数)

字符串逆序

题目:字符串逆序
编写一个函数reverse(char *string)
实现:将参数字符串中的字符反向排列,不是逆序打印

迭代方法

要实现一个字符串逆序,如下图所示,令这个字符串为abcdefg,它逆序就是把它实现为gfedcba。所以就是a和g交换位置,b和f交换位置,c和e交换位置。可以理解为左边和右边的元素一个一个交换位置。写一个交换函数reverse,交换字符是一个循环的过程,写一个while循环实现。这里要注意,如果是用sizeof求字符个数的话,字符串的结束标志是,所以right应等于sz-2,还要注意如果要用sizeof的话这里的sizeof(arr)/sizeof(arr[0])大小不能在函数内部求。

代码如下:

#include
void  reverse(char* str)
{
	int left = 0;
	int sz = strlen(str);
	int right = sz - 1;
	while (left < right)
	{
		char tmp = str[left];
		str[left] = str[right];
		str[right] = tmp;
		right--;
		left++;
	}
}
int main()
{
	char ch[] = "abcdefg";
	reverse(ch);
	printf("%sn", ch);
	return 0;
}

实现效果:

递归方法(少参数 ) (有strlen)

我们用递归的方法怎么实现字符串逆序?还是实现abcdefg逆序为gfedcba的过程,字符串的结束标志是,要想逆序整个字符串,可以理解为交换a和g加上逆序字符串bcdef,然后交换b和f加上逆序字符串cde。可以先将放在原先g的位置,这样可以实现字符串bcdef逆序,那b和f交换先把b放在tmp中,再把原来f的位置换成,可以实现字符串cde的逆序。如下图所示:总共把整个过程分成五步。第一步把a放在tmp中,第二步把g放在a原来的位置,第三步把放到g的位置,第四步实现字符串bcdef的逆序,第五步把tmp的元素放到原来g的位置。

代码如下:

#include
void  reverse(char* str)
{
	char tmp = *str;//1
	int len = strlen(str);
	*str = *(str + len - 1);//2
	*(str + len - 1) = '';//3
	if (strlen(str+1)>=2)
		reverse(str + 1);//4
	*(str + len - 1) = tmp;//5

}
int main()
{
	char ch[] = "abcdefg";
	reverse(ch);
	printf("%sn", ch);
	return 0;
}

代码实现效果:

(无strlen)

那要求我们不能使用C函数库中的字符串操作函数的话,那strlen就不能使用了,那我们可以自己写一个实现求字符串长度的函数。

代码如下:

int my_strlen(char* str)
{
	int count = 0;
	while (*str != '')
	{
		count++;
		str++;
	}
	return count;
}
递归方法二(多参数)

多参数的实现方法和迭代的方法相似,a和g交换后,再让字符串bcdef逆序,b和f交换后,再让字符串cde逆序。

代码如下:

#include
int my_strlen(char* str)
{
	int count = 0;
	while (*str != '')
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char ch[],int left,int right)
{
	char tmp = ch[left];
	ch[left] = ch[right];
	ch[right] = tmp;
	if (left < right)
		reverse(ch, left + 1, right - 1);

}
int main()
{
	char ch[] = "abcdefg";
	int left = 0;
	int right = strlen(ch) - 1;
	reverse(ch,left,right);
	my_strlen(ch);
	printf("%sn", ch);
	return 0;
}

代码实现效果:

写在最后✨:码字不易,对你有帮助的话,给个三连支持一下叭,或者也可以关注一下,每周更一篇,感谢支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号