这段代码实现了一个字符串逆序的函数 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;
}
具体解释如下:
-
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
放回到字符串的末尾。
-
int main()
函数:
- 创建一个字符数组
arr
用于存储用户输入的字符串。
- 使用
scanf("%s", arr);
接受用户输入的字符串。
- 调用
Reverse(arr);
对输入的字符串进行逆序操作。
- 使用
printf("逆序之后为: %s", arr);
输出逆序后的字符串。
需要的知识点:
- 字符串的表示和操作:C语言中字符串是以字符数组的形式存储的,以 \0 结尾。使用字符指针可以方便地操作字符串。
- 指针和指针运算:代码中使用了指针操作数组元素,如
*str
表示获取指针指向的值,str + len - 1
表示指针移动到数组中的某个位置。
- 递归:函数中使用了递归调用自身来实现对字符串的逆序操作。
- 字符串输入输出:使用
scanf
输入字符串,使用 printf
输出字符串。