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

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

目录
  • 字符串逆序🌑
    • 迭代方法🌘
    • 递归方法(少参数 )🌗
      • (有strlen)🍊
      • (无strlen)🍎
    • 递归方法二(多参数)🌕

字符串逆序🌑

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

迭代方法🌘

要实现一个字符串逆序,如下图所示,令这个字符串为abcdefg,它逆序就是把它实现为gfedcba。所以就是a和g交换位置,b和f交换位置,c和e交换位置。可以理解为左边和右边的元素一个一个交换位置。写一个交换函数reverse,交换字符是一个循环的过程,写一个while循环实现。这里要注意,如果是用sizeof求字符个数的话,字符串的结束标志是\0,所以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("%s\n", ch);
	return 0;
}

实现效果:

递归方法(少参数 )🌗 (有strlen)🍊

我们用递归的方法怎么实现字符串逆序?还是实现abcdefg逆序为gfedcba的过程,字符串的结束标志是\0,要想逆序整个字符串,可以理解为交换a和g加上逆序字符串bcdef,然后交换b和f加上逆序字符串cde。可以先将\0放在原先g的位置,这样可以实现字符串bcdef逆序,那b和f交换先把b放在tmp中,再把原来f的位置换成\0,可以实现字符串cde的逆序。如下图所示:总共把整个过程分成五步。第一步把a放在tmp中,第二步把g放在a原来的位置,第三步把\0放到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) = ';'//3if
	( strlen(+str1)2>=)reverse
		(+str 1 );//4*
	(+str - len 1 )= ; tmp//5}

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

代码实现效果:

(无strlen)🍎

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

代码如下:

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

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

代码如下🌟:

#my_strlen
( char*)int str=
{
	0 count ; while(
	* !=')'str ++ ;++
	{
		count;}
		strreturn;
	}
	void countreverse
(
char [], chint,int) leftchar= right[
{
	] tmp ; ch[left]=
	ch[left] ; ch[right]=
	ch;rightif ( tmp<
	) reverseleft ( right,
		+1ch, left - 1) right ; }intmain

(
) char[]
{
	= ch"abcdefg"; int =0
	; left int =strlen
	( right ) -1ch; reverse (,
	,)ch;leftmy_strlenright()
	;printfch("%s\n"
	,);return ch0;
	} 

代码实现效果:

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/867002.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-12
下一篇2022-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存