用递归方法实现字符串逆序

      这段代码实现了一个字符串逆序的函数 Reverse,并在 main 函数中接受用户输入的字符串,然后调用 Reverse 函数进行逆序操作,最后输出逆序后的字符串。


//逆序字符串(递归)

void Resever(char *str)         //str这个指针指向数组首元素的位置
{
	char temp = *str;          //将str指向的元素赋给临时变量temp
	int len = strlen(str);     //求字符串长度
	*str = *(str + len - 1);   //将剩余字符串最后一个元素赋值给str指向的位置
	*(str + len - 1) = '\0';   //将剩余字符最后一个元素设置为\0
	if (strlen(str+1)>=2)      //判断剩余字符数是否大于等于2,若是,则继续递归
	{
		Resever(str + 1);
	}
	*(str + len - 1) = temp;   //将temp存起来的值赋给字符串末尾
}

int main()
{
	char arr[20] = "";
	printf("请输入一个字符串");
	scanf("%s", arr);
	Resever(arr);
	printf("逆序之后为: %s", arr);
	return 0;
}

具体解释如下:

  1. void Reverse(char *str) 函数:

    • char *str 是一个指向字符数组首元素的指针,用于接收待逆序的字符串。
    • char temp = *str; 将指针 str 指向的第一个字符保存到临时变量 temp 中。
    • int len = strlen(str); 使用 strlen 函数获取字符串的长度。
    • *str = *(str + len - 1); 将字符串的第一个字符替换为字符串最后一个字符。
    • *(str + len - 1) = '\0'; 将原来字符串的最后一个字符设置为字符串结束符 \0,这样可以截断原字符串。
    • if (strlen(str + 1) >= 2) 判断剩余的字符数是否大于等于2,如果是,则递归调用 Reverse 函数,对剩余的字符串进行逆序操作。
    • *(str + len - 1) = temp; 将之前保存的第一个字符 temp 放回到字符串的末尾。
  2. int main() 函数:

    • 创建一个字符数组 arr 用于存储用户输入的字符串。
    • 使用 scanf("%s", arr); 接受用户输入的字符串。
    • 调用 Reverse(arr); 对输入的字符串进行逆序操作。
    • 使用 printf("逆序之后为: %s", arr); 输出逆序后的字符串。

 需要的知识点:

  • 字符串的表示和操作:C语言中字符串是以字符数组的形式存储的,以 \0  结尾。使用字符指针可以方便地操作字符串。
  • 指针和指针运算:代码中使用了指针操作数组元素,如 *str 表示获取指针指向的值,str + len - 1 表示指针移动到数组中的某个位置。
  • 递归:函数中使用了递归调用自身来实现对字符串的逆序操作。
  • 字符串输入输出:使用 scanf 输入字符串,使用 printf 输出字符串。

猜你喜欢

转载自blog.csdn.net/weixin_51345015/article/details/134520297